我正在使用 Laravel 的架构构建器和 mysql 来创建一个唯一的列。但当我使用独特的方法时,它是大小写不敏感。我需要它区分大小写。我怎样才能做到这一点?
架构:
Schema::create('item', function (Blueprint $table) {
$table->increments('id');
$table->string('key')->unique();
$table->timestamps();
});
首次进入数据库:
$i = new Item;
$i->key = "Random_Key";
$i->save();
第二次输入数据库(返回重复输入错误):
$i = new Item;
$i->key = "random_key";
$i->save();
您需要使用字符集和排序规则来指定mySQL中区分大小写的列
Laravel 在 mySQL 中具有 collate 和 charset 列修饰符 用于此目的
因此,您可以使用以下内容:
$table->string('key')->charset('utf8')->collate('utf8_cs')->unique()
正如OP所说,这对他有用:
$cs = $table->string('key')->unique();
$cs->collation = 'utf8_bin';
设置列VARBINARY的类型如何?
DB::statement('ALTER TABLE item MODIFY id VARBINARY(64);');
我在 Laravel 11 上有相同的配置文件,但以上都不起作用。我创建了一个新的迁移并添加了手动列更改。
public function up()
{
DB::statement('ALTER TABLE unit_types MODIFY name VARCHAR(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin UNIQUE');
}
public function down()
{
DB::statement('ALTER TABLE unit_types MODIFY name VARCHAR(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci UNIQUE');
}