次の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であることに注意してください。それは実際には「イー」です。ご覧のとおり、name フィールドの照合を COLLATE utf8_unicode_ci に指定しました。このテーブルにいくつかの名前をロードする Python スクリプトがあり、フィールド名が一意であり、照合順序が utf8_unicode_ci に設定されているため、iとíが同じであると見なされるため、このテーブルにLuisaを挿入できません。
ここで、エントリがPythonのテーブルに既に存在するかどうかを確認するために、最初にテーブルに存在するすべての名前をセットにロードし、テーブルに存在しない場合にのみ挿入しようとします。問題は、python がiとíを異なるものとして扱っていることです。
http://www.cmlenz.net/archives/2008/07/the-truth-about-unicode-in-pythonで、Python は照合をサポートしていないこと、およびによって書かれた uca の Python 実装があることを読みました 。ジェームズ・タウバー。ただし、これはソートには役立ちますが、MySQL で utf8 Unicode CI 照合を使用して 2 つの文字列が同じように扱われるかどうかを比較する場合には役立ちません。
Python でこれら 2 つの文字列を MySQL の方法で比較する方法はありますか?