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

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

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

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

解决方法:

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

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

来自Doctrine ORM FAQ:

4.1.1. How do I set the charset and collation for MysqL tables?

You can’t set these values inside the annotations, yml or xml mapping
files. To make a database work with the default charset and collation
you should configure MysqL to use it as default charset, or create the
database with charset and collation details. This way they get
inherited to all newly created database tables and columns.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...