我有以下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方式比较这两个字符串?
答案 0 :(得分:0)
现在,为了检查条目是否已经存在于python中的表中,我最初在表中加载表中存在的所有名称,并且只有在表中不存在时才尝试插入。
你做错了。对表执行查询以查看该条目是否已存在,或者尝试插入,并捕获异常。
答案 1 :(得分:0)
COLLATE utf8_bin
怎么样?
用于比较二进制格式的字符(严格比较)。