【问题标题】:Laravel Schema Builder | Unique, Case Sensitive ColumnLaravel 模式生成器 |独特的区分大小写的列
【发布时间】:2019-06-27 02:37:41
【问题描述】:

我正在使用 Laravel 的模式构建器和 mysql 来创建一个唯一的列。但是当我使用独特的方法时,它是大小写不敏感。我需要它区分大小写敏感。我怎样才能做到这一点?

架构:

Schema::create('item', function (Blueprint $table) {
    $table->increments('id');
    $table->string('key')->unique();
    $table->timestamps();
});

第一次进入数据库:

$i = new Item;
$i->key = "Random_Key";
$i->save();

第二次进入数据库(返回重复输入错误):

$i = new Item;
$i->key = "random_key";
$i->save();

【问题讨论】:

    标签: php mysql laravel


    【解决方案1】:

    您需要使用character sets and collations 指定case sensitive columns in mySQL

    Laravel 在 mySQL 中有 collate and charset column modifiers 用于此目的

    所以,你可以使用类似:$table->string('key')->charset('utf8')->collate('utf8_cs')->unique()

    正如 OP 所说,这对他有用:

    $cs = $table->string('key')->unique();

    $cs->collation = 'utf8_bin';
    

    【讨论】:

    • 我尝试将utf8_bin 作为排序规则,但是当我迁移表时,它不会更改排序规则。我必须进入数据库并手动更改排序规则。不过,我找到了解决方案。您所要做的就是这样... $cs = $table->string('key')->unique(); 然后您需要执行以下操作... $cs->collation = 'utf8_bin';
    • 很高兴您找到了解决方案。我将编辑我的答案以包含对您有用的内容
    • 这对我有帮助,特别是最后的 ->collat​​ion('utf8_bin') (没有它它不起作用)
    【解决方案2】:

    如何设置列 VARBINARY 的类型?

    DB::statement('ALTER TABLE item MODIFY id VARBINARY(64);');

    【讨论】:

    • 如果您有问题,请创建一个新问题。本部分仅提供答案
    猜你喜欢
    • 2016-05-27
    • 1970-01-01
    • 2019-02-24
    • 2011-03-08
    • 2014-01-19
    • 1970-01-01
    • 2012-05-05
    • 2017-06-12
    • 1970-01-01
    相关资源
    最近更新 更多