使用 Laravel 更新列排序规则

update column collation with laravel

提问人:Azima 提问时间:6/26/2019 最后编辑:Azima 更新时间:2/19/2022 访问量:11595

问:

我的表中有一个排序规则列。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中做到这一点?

php mysql laravel 排序规则 utf8mb4

评论


答:

10赞 Volod 6/26/2019 #1

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

$table->string('columName')->collation('utf8_bin')->change();

https://laravel.com/docs/7.x/migrations

评论

1赞 apokryfos 6/26/2019
文档似乎提到将排序规则更改为 as 和 notcollation('utf8mb4_bin')collate
0赞 Rick James 6/27/2019
utf8_cs-- 不在 MySQL 中。
1赞 apokryfos 6/26/2019 #2

您可以在查询时转换排序规则

Model::where(\DB::raw('hash_id COLLATE utf8mb4_bin'), 'yA2JeGs');

但是,您可能应该更改表本身的排序规则,因为不区分大小写的排序规则似乎是一开始就用于该字段的错误排序规则。

注意:MySQL没有排序规则。但是,如果您仅使用 ASCII 哈希码,那么应该足够好了。utf8mb4_general_csutf8mb4_bin

评论

0赞 Azima 6/26/2019
我尝试更改表格列的排序规则,但是一样的。更新了我的帖子。 请检查
2赞 Daantje 4/2/2020 #3

我只能使用原始查询更改排序规则,蓝图 change() 方法对我没有任何作用,除非我也更改了字段类型。

这对我有用:

public function up()
{
    DB::statement("ALTER TABLE tableName MODIFY columnName VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
}
1赞 Bhargav Rangani 2/19/2022 #4

直接排序规则在蓝图中不起作用,需要添加字符集。

这对我有用:

$table->text('message')->charset('utf8mb4')->collation('utf8mb4_general_ci')->nullable()->change();