[英]How to set character_set_results latin1 mysql in Django?
[英]django character set with MySQL weirdness
我正在看
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中的所有內容(我認為)。
您可以通過外殼更改表編碼:
$ 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]))
看來您的數據庫默認為latin1_swedish_ci,因此不能接受所有utf8字符。 您需要更改MySQL數據庫表的配置以使用utf8_general_ci。 可以在MySQL Performance Blog上找到有關此問題的很好的博客文章(帶有工具鏈接)。
您將在django設置文件中添加OPTIONS,如下所示:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {'charset': 'utf8mb4'},
'NAME': 'sarpanchDb',
'USER': 'root',
'PASSWORD': 'tiger',
'HOST': 'localhost',
'PORT': '',
},
}
另外,您將需要在/etc/mysql/my.cnf文件中進行更改
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
然后重啟mysql服務
sudo service mysql restart
使用以下查詢交叉檢查它是否有效
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR
Variable_name LIKE 'collation%';
您應該獲得以下輸出
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+--------------------+
10 rows in set (0.00 sec)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.