【发布时间】:2016-03-13 00:57:42
【问题描述】:
我的数据库表字符集和排序规则分别设置为utf-8 和utf8_general_ci。我在 varchar 列中插入了一条值为 'säî kîråñ' 的记录。我对此有一个独特的列约束。当我尝试插入“sai kiran”时,它给出的重复条目指的是旧插入的“säîkîråñ”行。
正如您所见,两个字符串中的字符在 utf8 字符集中完全不同,无法理解为什么它显示错误为“重复条目”。
我尝试将排序规则更改为utf8_unicode_ci,但没有用。我尝试直接插入 phpmyadmin 以避免 prog lang 编码问题,但问题仍然存在。
【问题讨论】:
-
建立连接后你在
SET NAMES utf8吗? -
我有大量的插入,所以在 phpmyadmin 中使用文件上传(使用插入语句),并且上传文件时在 phpmyadmin 中选择的默认字符集是“utf8”。
-
我不确定排序规则对唯一约束有什么影响,但如果它确实影响它,你会想要一个 bin 排序规则而不是通用或 unicode 排序规则.
-
是的,我知道 utf8_bin 适用于区分大小写的比较。在 utf8_general_ci 的情况下,我认为只有 'a' 和 'A' 会被同等对待,但从here 我发现即使是 'a' 和 'ä' 也会被同等对待。所以 utf8_bin 是区别对待它们的终极解决方案。不过很好的学习......
标签: mysql encoding utf-8 character-encoding collation