最近在使用 Django 開發(fā) Web 應(yīng)用時(shí),遇到了處理中文字符編碼的問題。在 MySQL 中存儲(chǔ)中文字符沒有問題,但是在 Django 中傳輸和展示時(shí)出現(xiàn)了亂碼。經(jīng)過一番研究,發(fā)現(xiàn)使用 utf8mb4 編碼可以解決這個(gè)問題。
首先,我們需要在 MySQL 中設(shè)置字符編碼為 utf8mb4。可以通過命令行或者可視化工具進(jìn)行設(shè)置:
ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
接著,在 Django 的 settings.py 中進(jìn)行配置:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dbname', 'USER': 'username', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '3306', 'OPTIONS': { 'charset': 'utf8mb4', 'sql_mode': 'traditional', }, } }
其中,需要注意兩個(gè)地方:
- OPTIONS 中的 charset 必須設(shè)置為 utf8mb4。
- 如果出現(xiàn)插入數(shù)據(jù)失敗的情況,可以嘗試將 sql_mode 設(shè)置為 traditional。
最后,在 Django 的 models.py 中對需要存儲(chǔ)中文字符的字段進(jìn)行設(shè)置:
class MyModel(models.Model): title = models.CharField(max_length=255, charset='utf8mb4') content = models.TextField(charset='utf8mb4')
設(shè)置完畢后,就可以愉快地使用中文了。