最近在使用 Django 開發 Web 應用時,遇到了處理中文字符編碼的問題。在 MySQL 中存儲中文字符沒有問題,但是在 Django 中傳輸和展示時出現了亂碼。經過一番研究,發現使用 utf8mb4 編碼可以解決這個問題。
首先,我們需要在 MySQL 中設置字符編碼為 utf8mb4。可以通過命令行或者可視化工具進行設置:
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 中進行配置:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dbname', 'USER': 'username', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '3306', 'OPTIONS': { 'charset': 'utf8mb4', 'sql_mode': 'traditional', }, } }
其中,需要注意兩個地方:
- OPTIONS 中的 charset 必須設置為 utf8mb4。
- 如果出現插入數據失敗的情況,可以嘗試將 sql_mode 設置為 traditional。
最后,在 Django 的 models.py 中對需要存儲中文字符的字段進行設置:
class MyModel(models.Model): title = models.CharField(max_length=255, charset='utf8mb4') content = models.TextField(charset='utf8mb4')
設置完畢后,就可以愉快地使用中文了。