我的表中有一个case-insensitive排序规则列。
col_name : hash_id, collation : utf8mb4_unicode_ci当我只搜索前者时,我会得到yA2JeGs和YA2JeGs的结果。
因此,我需要更新排序规则以确保该列的case-sensitivity。
我尝试更改该列的排序规则,创建一个新的migration文件:
public function up()
{
Schema::table('product_match_unmatches', function (Blueprint $table) {
$table->string('hash_id')->collate('utf8mb4_bin')->change();
});
}还可以使用$table->string('hash_id')->collation('utf8mb4_bin')->change();
迁移运行成功,但排序规则保持不变。
我如何在laravel中做到这一点?
发布于 2019-06-26 18:30:04
您需要使用laravel schema builder创建新的迁移并使列区分大小写,代码如下:
$table->string('columName')->collation('utf8_bin')->change();发布于 2019-06-26 18:47:42
您可以在查询时转换归类
Model::where(\DB::raw('hash_id COLLATE utf8mb4_bin'), 'yA2JeGs');但是,您可能应该更改表本身的排序规则,因为不区分大小写的排序规则似乎是最初在该字段上使用的错误排序规则。
注意: MySQL没有utf8mb4_general_cs排序规则。但是,如果您只使用ASCII哈希码,那么utf8mb4_bin应该就足够好了。
发布于 2020-04-02 04:16:34
我只能使用原始查询来更改排序规则,Blueprint change()方法对我没有任何作用,除非我也更改了字段类型。
这对我很有效:
public function up()
{
DB::statement("ALTER TABLE tableName MODIFY columnName VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
}https://stackoverflow.com/questions/56770416
复制相似问题