【问题标题】:update column collation with laravel使用 laravel 更新列排序规则
【发布时间】:2019-11-08 06:12:09
【问题描述】:

我的表中有一个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 collation utf8mb4


    【解决方案1】:

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

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

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

    【讨论】:

    • 文档似乎提到将排序规则更改为 collation('utf8mb4_bin') 而不是 collate
    • utf8_cs -- 不在 MySQL 中。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 我尝试更改表格列的排序规则,但结果相同。更新了我的帖子。请检查
    【解决方案3】:

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

    这对我有用:

    public function up()
    {
        DB::statement("ALTER TABLE tableName MODIFY columnName VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
    }
    

    【讨论】:

      猜你喜欢
      • 2011-02-13
      • 2013-01-13
      • 2015-04-03
      • 1970-01-01
      • 2017-06-05
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 2020-09-16
      相关资源
      最近更新 更多