我知道这听起来很奇怪,但看看这个:
mysql> select * from tbl_list_charset where word='aê';
+------+
| word |
+------+
| aª |
+------+
数据来自一个带有utf-8字符串的文件,python程序读取并插入到表中。由于word
列定义为唯一,因此aê
的插入失败。
文件中字符串的utf-8表示形式为:
aê= 61 C3 AA
aª= 61 C2 AA
我的环境:linux,python 2.6.4,mysql 5.0.77社区版
我很确定这不是一个错误,但我对我做错了什么一无所知......
答案 0 :(得分:1)
您是否也将UTF-8与mysql
客户端程序以及Python应用程序一起使用?
即在进行任何其他查询之前,调用mysql --default-character-set=utf8
并在Python中至少发出一个SET NAMES='utf8'
?
答案 1 :(得分:1)
排序规则确定哪些字符比较为“相等”。是的,这些情况中有很多。你可以尝试utf8_bin整理,你不会遇到这个问题,但它会区分大小写。 bin整理严格比较,只根据选择的编码将字符分开,一旦完成,比较就在二进制基础上完成,就像manhy编程语言会比较字符串一样。
如果您需要介于此极限和当前排序规则之间的某些内容,则可以进行自定义排序规则。或者,您可以通过存储另一列,并在其上使用不同的排序规则以及每个col用于特定目的来使其“足够好”。