我有一个像这样的字段的实体:
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255, unique=true)
*/
private $name;
但是,如果我尝试修改名称从“测试”到“测试”,我得到一个错误,这个名字已经被采取!知道为什么会这样吗?一个独特的索引案例是否具有影响力?
答案 0 :(得分:6)
你的问题是因为你有utf8_general_ci整理注意 _ci 这意味着不区分大小写,反过来这意味着数据库会对待“测试”,“测试”,“ TEst“等同。
您必须手动将数据库中的列排序规则更改为utf8_bin,或者更改为utf8_xxx_ cs (其中xxx是语言名称),如果您碰巧拥有所需语言的列排序规则。
来自Doctrine ORM FAQ:
4.1.1。如何为MySQL表设置字符集和排序规则?
您无法在注释,yml或xml映射中设置这些值 文件。使数据库使用默认的字符集和排序规则 你应该配置MySQL使用它作为默认的字符集,或创建 具有charset和collation细节的数据库。这样他们就得到了 继承到所有新创建的数据库表和列。