簡體   English   中英

Django字符集與MySQL怪異

[英]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]))

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

看來您的數據庫默認為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM