我的表中有一个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中做到这一点?
答案 0 :(得分:2)
您需要使用laravel模式构建器和下面提到的代码创建新的迁移并使列区分大小写:
$table->string('columName')->collate('utf8_cs')->change();
答案 1 :(得分:1)
您可以在查询时转换排序规则
Model::where(\DB::raw('hash_id COLLATE utf8mb4_bin'), 'yA2JeGs');
但是,您可能应该更改表本身的排序规则,因为似乎不区分大小写的排序规则是在该字段上使用的错误排序规则。
注意:MySQL没有utf8mb4_general_cs
排序规则。但是,如果仅使用ASCII哈希码,那么utf8mb4_bin
应该足够好。
答案 2 :(得分:0)
我只能使用原始查询来更改排序规则,Blueprint change()方法对我没有帮助,除非我也更改了字段类型。
这对我有用:
pd.DataFrame(np.outer(df, df), df.index, df.index)