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

时间:2013-12-01 10:43:40

标签: php symfony doctrine-orm

我有一个像这样的字段的实体:

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

但是,如果我尝试修改名称从“测试”到“测试”,我得到一个错误,这个名字已经被采取!知道为什么会这样吗?一个独特的索引案例是否具有影响力?

1 个答案:

答案 0 :(得分:6)

你的问题是因为你有utf8_general_ci整理注意 _ci 这意味着不区分大小写,反过来这意味着数据库会对待“测试”,“测试”,“ TEst“等同。

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

来自Doctrine ORM FAQ:

  

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

     

您无法在注释,yml或xml映射中设置这些值   文件。使数据库使用默认的字符集和排序规则   你应该配置MySQL使用它作为默认的字符集,或创建   具有charset和collat​​ion细节的数据库。这样他们就得到了   继承到所有新创建的数据库表和列。