MySQL在Python中整理utf8样式字符串比较

时间:2012-12-26 08:23:52

标签: python mysql string-comparison collate

我有以下MySQL表

mysql> show create table names;
+-------+-----------------------------------------------------+
| Table | Create Table                                        |
+-------+----------------------------- -----------------------+
| names | CREATE TABLE `names` (
`name` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
 UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci  |
+-------+-----------------------------------------------------+

现在,该表有以下记录

mysql> select * from names;
+--------+
| name   |
+--------+
| Luísa  |
+--------+

请注意,该条目为Luísa。它实际上是'í'。如您所见,我已将名称字段的排序规则指定为COLLATE utf8_unicode_ci。我有一个Python脚本,将一些名称加载到此表中,并且字段名称是唯一的,并且排序规则设置为utf8_unicode_ci,我无法在此表中插入 Luisa ,因为它认为í是一样的。

现在,为了检查条目是否已经存在于python中的表中,我最初在表中加载表中存在的所有名称,并且只有在表中不存在时才尝试插入。现在,问题是python正在将 i í视为不同。

我读了它 http://www.cmlenz.net/archives/2008/07/the-truth-about-unicode-in-python Python不支持整理,我们有一个python implementation of the uca由James Tauber编写。但是,这有助于排序,但不是在比较两个字符串在MySQL中是否与utf8 Unicode CI排序相同。

在Python中有没有办法用MySQL方式比较这两个字符串?

2 个答案:

答案 0 :(得分:0)

  

现在,为了检查条目是否已经存在于python中的表中,我最初在表中加载表中存在的所有名称,并且只有在表中不存在时才尝试插入。

你做错了。对表执行查询以查看该条目是否已存在,或者尝试插入,并捕获异常。

答案 1 :(得分:0)

COLLATE utf8_bin怎么样?

用于比较二进制格式的字符(严格比较)。