首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 中文亂碼排查:庫/表/列字符集與排序規則一致性檢查 SQL

     編輯:MySQL 綜合教學

MySQL 中文亂碼排查:庫/表/列字符集與排序規則一致性檢查 SQL

中文寫入變亂碼,90% 是字符集/排序規則不一致導致隱式轉換錯誤。核心原則:庫、表、列三級字符集與排序規則必須完全一致。本文提供一鍵檢查 SQL,快速定位不一致層級。

一鍵檢查腳本(按需修改库名)

-- 1. 庫級別
SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME = 'YourDBName';

-- 2. 表級別
SELECT TABLE_NAME, TABLE_COLLATION
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'YourDBName';

-- 3. 列級別
SELECT TABLE_NAME, COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'YourDBName'
  AND DATA_TYPE IN ('char','varchar','text','enum','set');

常見不一致場景

  • 臨時表未指定字符集,繼承會話/庫默認(可能為 latin1),下游表為 utf8mb4,賦值時發生 latin1→utf8mb4 錯誤轉換。
  • ALTER TABLE ... MODIFY COLUMN 修改列類型時未帶 CHARACTER SET,導致該列編碼與表其他列不同。
  • 跨庫 INSERT ... SELECT 時,源庫 utf8mb4、目標庫 latin1,隱式轉換丟失字符。

修復建議

  1. 統一規範:新建庫表強制 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci(或 8.0+ utf8mb4_0900_ai_ci)。
  2. 已有不一致:ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 遞歸轉換表及所有列。
  3. 應用層連接字符串顯式 charset=utf8mb4,避免會話級 character_set_client 為 latin1。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved