【问题标题】:mysql character set utf 8 collation (dup key) not working properlymysql 字符集 utf 8 排序规则(dup 键)无法正常工作
【发布时间】:2016-03-13 00:57:42
【问题描述】:

我的数据库表字符集和排序规则分别设置为utf-8utf8_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


【解决方案1】:

utf8_general_ci 的情况下,我认为只有'a' and 'A' 会被同等对待,但从here 我发现即使'a' and 'ä' 也会被同等对待。所以utf8_bin 是区别对待它们的终极解决方案。不过很好学。

【讨论】:

  • 请注意select 'a' = 'ä' 为真,但select 'a' collate utf8_bin = 'ä' collate utf8_bin 为假。
  • 在大多数(不是全部)utf8 排序规则中,A=a=À=Á=Á=Â=Ã=Ä=Å=à=á=á=â=ã=ä=å=Ā =ā=Ą=ą .对于 utf8_bin,所有这些都是不同的。
【解决方案2】:

由于缺少utf8_..._ci_as 排序规则,您应该(至少)将该列的排序规则更改为utf8_bin。然后,不是所有这些都相等S=s=Ş=ş=Š=Š=š=š,而是它们都将不同。特别注意。 sS 在 utf8_bin 中是不同的。

【讨论】:

    猜你喜欢
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多