MySql没有正确比较utf-8字符串?

时间:2011-01-20 16:40:27

标签: python mysql linux utf-8 character-encoding

我知道这听起来很奇怪,但看看这个:

mysql> select * from tbl_list_charset where word='aê';
+------+
| word |
+------+
| aª  | 
+------+

数据来自一个带有utf-8字符串的文件,python程序读取并插入到表中。由于word列定义为唯一,因此的插入失败。

文件中字符串的utf-8表示形式为:

  

aê= 61 C3 AA
  aª= 61 C2 AA

我的环境:linux,python 2.6.4,mysql 5.0.77社区版

我很确定这不是一个错误,但我对我做错了什么一无所知......

2 个答案:

答案 0 :(得分:1)

您是否也将UTF-8与mysql客户端程序以及Python应用程序一起使用? 即在进行任何其他查询之前,调用mysql --default-character-set=utf8并在Python中至少发出一个SET NAMES='utf8'

答案 1 :(得分:1)

排序规则确定哪些字符比较为“相等”。是的,这些情况中有很多。你可以尝试utf8_bin整理,你不会遇到这个问题,但它会区分大小写。 bin整理严格比较,只根据选择的编码将字符分开,一旦完成,比较就在二进制基础上完成,就像manhy编程语言会比较字符串一样。

如果您需要介于此极限和当前排序规则之间的某些内容,则可以进行自定义排序规则。或者,您可以通过存储另一列,并在其上使用不同的排序规则以及每个col用于特定目的来使其“足够好”。