原则ORM唯一字符串不区分大小写


Doctrine ORM unique string is not case sensitive

我得到了一个实体,其字段如下:

/**
     * @var string
     *
     * @ORM'Column(name="name", type="string", length=255, unique=true)
     */
    private $name;

但是,如果我试图修复名称中从"test"到"test"的拼写错误,我会得到一个错误,这个名称已经被使用了!知道为什么会这样吗?一个唯一的索引大小写是否有说服力?

您的问题是因为您有utf8_general_ci排序规则,请注意_ci,这意味着不区分大小写,反过来意味着数据库对"Test"、"Test"、"Test"等一视同仁。

您必须手动将数据库中的列排序规则更改为utf8_bin,或者更改为utf4_xxx_cs(其中xxx是语言名称)(如果您碰巧有一个用于所需语言的排序规则)。

来自条令ORM常见问题解答:

4.1.1.如何设置MySQL表的字符集和排序规则?

不能在注释、yml或xml映射中设置这些值文件。使数据库使用默认字符集和排序规则您应该将MySQL配置为将其用作默认字符集,或者创建包含字符集和排序规则详细信息的数据库。他们就这样继承到所有新创建的数据库表和列。