2012-09-22 91 views
0

我在os x上遇到了mysql 5.5的問題。我正在開發一個多語言項目 並使用MyISAM表。缺省字符集是utf-8和默認排序規則utf8_unicode_ci。mysql 5.5 utf-8排序規則utf8_unicode_ci,pymysql

意大利和德國很好,但西班牙不是。我使用python來操縱數據, pymysql驅動程序與charset選項utf-8和unicode true。

實際上所有特定的西班牙文字母都是一團糟。

蟒蛇外殼:

>>>r 
>>>['Blas P\xc3\xa9rez Gonz\xc3\xa1lez, 4'] 
>>>print[0] 
>>>Blas Pérez González, 4 
after saving it to database and fetching it again: 
>>>r 
>>>(u'Blas P\xc3\xa9rez Gonz\xc3\xa1lez, 4') 
>>>print r[0] 
>>>Blas Pérez González, 4 

我真糊塗,這顯然似乎是相同的unicode字符串!

謝謝。

+0

爲什麼第一個字符串沒有以'u'開頭(作爲第二個?) – danihp

+0

感謝您的回答,但更詳細的解釋會幫助我理解:) – xaverras

回答

0

更好地使用Java風格的Unicode轉義字符,像

u'\\u0e4f\\u032f\\u0361\\u0e4f'.decode('unicode-escape') 

similar question

這可確保您在字符串中包含Unicode。

然後實際的問題:嘗試在mysql describe the_table。仍然在column definition可以設置字符集。試試看看你的桌子是否可以。


來進行測試:在數據庫商店u'Blas P\\u00e9rez Gonz\\u00e1lez'.decode('unicode-escape')。 然後你知道存儲了正確的unicode字符串。 如果數據庫具有正確的數據庫/表/字段定義,則只有檢索(不存儲)可能存在錯誤。

+0

請多說明一些。除非我能夠首先解碼當前格式,否則我無法以任何其他格式對字符串進行編碼。 – xaverras

+0

擴展了答案。 –

+0

好吧,非常感謝,至少在java風格的unicode中保存字符串並重試它會以正確的方式顯示問題:u'Blas P \ xe9rez Gonz \ xe1lez',不使用java-風格是u'Blas P \ xc3 \ xa9rez Gonz \ xc3 \ xa1lez,4'。我的問題是現在如何從數據庫中檢索所有錯誤的記錄,並將其轉換爲java樣式並再次保存。我在谷歌搜索一段時間,但不幸沒有成功 – xaverras