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

Nek*_*cer 3 php symfony doctrine-orm

我得到了一个像这样的字段的实体:

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

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

hid*_*003 7

你的问题是因为你有utf8_general_ci整理注意_ci这意味着不区分大小写,反过来这意味着数据库对待"Test","test","TEst"等相同.

你将不得不更改列排序规则在数据库中手动utf8_bin,或utf8_xxx_ CS(其中xxx是语言的名字),如果你碰巧有一个所需的语言.

来自Doctrine ORM FAQ:

4.1.1.如何为MySQL表设置charset和collat​​ion?

您无法在注释,yml或xml映射文件中设置这些值.要使数据库使用默认的字符集和排序规则,您应该将MySQL配置为使用默认字符集,或者使用字符集和排序规则详细信息创建数据库.这样,它们就会继承到所有新创建的数据库表和列.