提问人:Azima 提问时间:6/26/2019 最后编辑:Azima 更新时间:2/19/2022 访问量:11595
使用 Laravel 更新列排序规则
update column collation with laravel
问:
我的表中有一个排序规则列。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中做到这一点?
答:
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_cs
utf8mb4_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();
评论