Laravel 架构生成器 | 独特的区分大小写的列

wiz*_*zeb 4 php mysql laravel

我正在使用 Laravel 的架构构建器和 mysql 来创建一个唯一的列。但是当我使用 unique 方法时,它不区分大小写。我需要区分大小写。我怎样才能做到这一点?

架构:

Schema::create('item', function (Blueprint $table) {
    $table->increments('id');
    $table->string('key')->unique();
    $table->timestamps();
});
Run Code Online (Sandbox Code Playgroud)

第一次进入数据库:

$i = new Item;
$i->key = "Random_Key";
$i->save();
Run Code Online (Sandbox Code Playgroud)

第二次进入数据库(返回重复输入错误):

$i = new Item;
$i->key = "random_key";
$i->save();
Run Code Online (Sandbox Code Playgroud)

Par*_*ras 6

您需要使用字符集和排序规则在 mySQL 中指定区分大小写的列

为此,Laravel在 mySQL 中有collat​​e 和 charset 列修饰符

所以,你可以使用类似的东西: $table->string('key')->charset('utf8')->collate('utf8_cs')->unique()

正如 OP 所说,这对他有用:

$cs = $table->string('key')->unique();

$cs->collation = 'utf8_bin';
Run Code Online (Sandbox Code Playgroud)

  • 我尝试使用 `utf8_bin` 作为排序规则,但是当我迁移表时,它不会更改排序规则。我必须进入数据库并手动更改排序规则。不过我找到了解决方案。你所要做的就是这样...... `$cs = $table->string('key')->unique();` 然后你需要做以下事情...... `$cs->collat​​ion = 'utf8_bin';` (2认同)