2017-08-04 50 views
0

在開始之前,我知道這個問題非常重要,但我幾乎查看了所有符合與此問題相關的各種搜索術語的SO問題。不正確的字符串值MySQL和Python的3字節字符

我的問題是,我試圖存儲一個3字節的字符在utf8中,而不是4個字節,許多問題要求,特別是中文字符。

DB字符集是UTF8,並帶有utf8_general_ci歸類。列,表和連接字符集也是utf8。

MySQLdb.connect(host, user, passwd, schema, charset ='utf8', use_unicode=True) 

我知道use_unicode是隱含的,但我喜歡冗長。

我得到的警告是:Warning: Incorrect string value: '\xE5\x9B\xBD' for column 'mycolumn' at row 1

這導致在這一領域中選擇,導致?。我的終端支持utf8,以及我的系統編碼是utf8。

任何想法都會有幫助。在這個值上調用.decode('utf8')也不能解決問題。

回答

1

原來這是存儲過程的一個問題。從MYSQL文檔。

如果不存在CHARACTER SET和COLLATE屬性,則使用在例程創建時生效的數據庫字符集和排序規則。爲了避免讓服務器使用數據庫字符集和歸類,請爲字符數據參數提供顯式的CHARACTER SET和COLLATE屬性。

連接和客戶端編碼是UTF8,但數據庫仍保留爲latin1。這是因爲存儲過程是在DB編碼爲latin1時創建的,所以導致了問題。

TLDR;將CHARSET utf8添加到您的存儲過程參數。

相關問題