使用laravel更新列排序规则

时间:2019-06-26 10:18:09

标签: php mysql laravel collation utf8mb4

我的表中有一个case-insensitive排序规则列。

col_name : hash_id, collation : utf8mb4_unicode_ci

仅搜索前者时,我会得到yA2JeGsYA2JeGs的结果。

因此,我需要更新排序规则以确保该列的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中做到这一点?

3 个答案:

答案 0 :(得分:2)

您需要使用laravel模式构建器和下面提到的代码创建新的迁移并使列区分大小写:

$table->string('columName')->collate('utf8_cs')->change();

https://laravel.com/docs/5.8/migrations

答案 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)