首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 遷移後字符集亂碼報錯「Incorrect string value」完美解決方案

     編輯:MySQL 資料庫相關知識

問題現象

將 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 字符集配置不一致導致。

解決方案:修改 my.ini 強制指定 UTF-8

在 [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 服務,問題即刻解決。

驗證與輔助命令

1. 查看數據庫默認字符集

SHOW CREATE DATABASE db_name;

2. 修改已有數據庫字符集

ALTER DATABASE db_name CHARACTER SET utf8 COLLATE utf8_general_ci;

3. 查看當前連接字符集信息

STATUS;
-- 或
SHOW VARIABLES LIKE 'char%';

根因分析

遷移時若僅拷貝數據文件或導出導入未指定字符集,新實例默認可能為 latin1,導致寫入 UTF-8 數據時編碼衝突。統一在配置文件強制指定 UTF-8,並重啟生效,是徹底解決之道。

最佳實踐建議

  • 新建實例首件事:配置文件鎖定 utf8mb4(支援 Emoji)
  • 導出數據時顯式指定:mysqldump --default-character-set=utf8mb4
  • 應用層連接字符串添加 charset=utf8mb4
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved