我有以下 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方式比较这两个字符串?