2012-12-26 74 views
3

我有以下MySQL表Mysql的整理UTF8風格的字符串對比中蟒蛇

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 | 
+--------+ 

注意該條目是路易莎。這實際上是一個'í'。 正如你所看到的,我已經指定了名稱字段的排序規則以COLLATE utf8_unicode_ci。我有一個加載一些名字到這個表和字段名的Python腳本是獨一無二的,並與設置爲utf8_unicode_ci的整理,我無法插入路易莎在這個表,因爲它認爲í到是相同的。現在,爲了檢查這個條目是否已經存在於python的表中,我最初加載了表中的所有名稱,並且只在它已經不存在於表中時才嘗試插入。現在,問題是蟒蛇正在處理和是不同的。

我在 http://www.cmlenz.net/archives/2008/07/the-truth-about-unicode-in-python中讀到它,python不支持排序規則,而且我們有James Tauber寫的python implementaion of the uca。然而,這有助於排序,但不能在比較兩個字符串在MySQL中是否與utf8 unicode ci collat​​ion相同。

有沒有辦法在Python中比較這兩個字符串的mysql方式?

回答

0

現在,爲了檢查該條目是否已經存在於python表中,我最初加載了表中的所有名稱,並且我嘗試只在它不存在於表已經。

你做錯了。對錶執行查詢以查看條目是否已經存在,或嘗試插入而不管是否捕獲異常。

+0

是的,無論是他們的,雖然我相信嘗試插入,然後抓會更有效,因爲它會降低查詢到數據庫的數量應該解決這個問題。不過,我也想知道python是否提供了一些強制執行這種字符串比較的方法。 –

0

COLLATE utf8_bin怎麼樣?

它用於比較二進制格式的字符(嚴格比較)。

+0

這解決了錯誤的問題。 –

+0

是的,但我希望該字段在該排序規則中。 –

+0

@ArunKumarNagarajan,以及'STRCMP(str1,str2)'如果你手動比較字符串時說的是什麼?如果字符串相同,則返回0;如果第一個參數小於第二個參數,則返回-1,否則返回1。 –