2009-07-02 117 views
20

我看到Django的性格與MySQL設置古怪

OperationalError (1267, "Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='") 

它看起來像我的一些變量是UTF8字符串

'名':「P \ xc7 \ x9d \ XCA \的x87 \ xc9 \ x9f \ xc4 \ xb1 \ xc9 \ xa5s徽章'

這是配置問題嗎?如果是這樣,我該如何解決它?我想處理所有的Unicode(我認爲)。

回答

11

它看起來你的數據庫默認爲latin1_swedish_ci,因此不能接受所有的utf8字符。您需要更改MySQL數據庫表的配置以使用utf8_general_ci。有關這方面的一個很好的博文(鏈接到一個工具)可以在MySQL Performance Blog

40

找到您可以通過外殼更改表編碼:

$ manage.py shell 
>>> from django.db import connection 
>>> cursor = connection.cursor() 
>>> cursor.execute('SHOW TABLES') 
>>> results=[] 
>>> for row in cursor.fetchall(): results.append(row) 
>>> for row in results: cursor.execute('ALTER TABLE %s CONVERT TO CHARACTER SET utf8 COLLATE  utf8_general_ci;' % (row[0])) 

https://mayan.readthedocs.org/en/v0.13/faq/index.html

+6

這個工作太棒了!但是請記住,你的數據庫字符集將保持原樣,改變它也執行:`ALTER DATABASE databasename CHARACTER SET utf8;` – Caumons 2012-04-11 09:06:56