3

我有以下 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,因为它认为ií相同。

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

我在 http://www.cmlenz.net/archives/2008/07/the-truth-about-unicode-in-python中读到 Python 不支持排序规则,并且我们有一个由 uca编写的python 实现詹姆斯陶伯。但是,这有助于排序,但在比较两个字符串是否会在 MySQL 中使用 utf8 Unicode CI 排序规则时被视为相同则无济于事。

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

4

2 回答 2

0

现在,为了检查该条目是否已经存在于 python 的表中,我最初将表中存在的所有名称加载到一个集合中,并且我尝试仅在它不存在于表中时才插入。

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

于 2012-12-26T08:30:05.377 回答
0

怎么样COLLATE utf8_bin

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

于 2012-12-26T08:31:15.080 回答