將 MySQL 數據庫遷移至新機器後,Django 應用寫入中文報錯:
Warning at /admin/assets/add/
Incorrect string value: '\xE5\x93\x88\xD5\x92\x88...' for column 'Name' at row 1
Exception Type: Warning
Exception Value: Incorrect string value: '\xE5\x93\x88\xD5\x92\x88...' for column 'Name' at row 1
初步判斷為 MySQL 字符集配置不一致導致。
在 [mysqld]、[client]、[mysql] 節點添加如下配置:
[client]
character-set-client = utf8
default-character-set = utf8
[mysqld]
character-set-server = utf8
character-set-filesystem = utf8
init_connect='SET NAMES utf8'
[mysql]
default-character-set=utf8
保存後重啟 MySQL 服務,問題即刻解決。
SHOW CREATE DATABASE db_name;
ALTER DATABASE db_name CHARACTER SET utf8 COLLATE utf8_general_ci;
STATUS;
-- 或
SHOW VARIABLES LIKE 'char%';
遷移時若僅拷貝數據文件或導出導入未指定字符集,新實例默認可能為 latin1,導致寫入 UTF-8 數據時編碼衝突。統一在配置文件強制指定 UTF-8,並重啟生效,是徹底解決之道。
utf8mb4(支援 Emoji)mysqldump --default-character-set=utf8mb4charset=utf8mb4