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

MySQL 插入中文顯示亂碼/問號完整解決方案

     編輯:MySQL 綜合教學

MySQL 插入中文顯示亂碼/問號完整解決方案

環境:MySQL 5.7.12。遇到中文插入報錯 Incorrect string value 或存入後顯示 ??,核心原因是字元集設定不一致。本文提供分層解決方案。

現象對照

症狀錯誤訊息原因
插入失敗Incorrect string value: '\xCD\xF5...' for column 'Sname' at row 1連線字元集非 utf8,無法識別中文編碼
插入成功但顯示問號資料庫呈現 ??儲存層字元集非 utf8,資料寫入時已損毀

方案一:修改伺服器預設字元集 (my.cnf / my.ini)

Windows (my.ini):

[mysqld]
# 必須放在 [mysqld] 區塊最下方,藍框標示位置
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci

# 可選:客戶端預設
[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

my.ini 設定位置示意圖

Linux (my.cnf):同樣在 [mysqld] 區段加入上述兩行。修改後 必須重啟 MySQL 服務 生效。

方案二:連線字串指定字元集 (JDBC / 程式碼層面)

若方案一無效,通常是連線層未指定編碼。在 JDBC URL 追加參數:

jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Taipei
  • useUnicode=true:啟用 Unicode
  • characterEncoding=UTF-8:指定傳輸編碼
  • serverTimezone:避免時區警告 (5.7+ 建議加上)

方案三:資料庫/資料表/欄位層級指定 (補救既有結構)

# 資料庫層級
ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

# 資料表層級
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

# 欄位層級 (若僅特定欄位需支援中文)
ALTER TABLE tbl_name MODIFY col_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

方案四:驗證字元集設定

# 檢查伺服器變數
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

# 期望結果 (關鍵項)
+--------------------------+---------+
| Variable_name            | Value   |
+--------------------------+---------+
| character_set_server     | utf8mb4 |
| character_set_database   | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_client     | utf8mb4 |
| character_set_results    | utf8mb4 |
| collation_server         | utf8mb4_general_ci |
+--------------------------+---------+

常見誤區

  • 使用 utf8 而非 utf8mb4:MySQL 的 utf8 僅支援 3 位元組字元 (BMP),無法儲存 Emoji 或生僻字,務必使用 utf8mb4。
  • 設定位置錯誤:character-set-server 必須在 [mysqld] 區塊,放在 [client] 或 [mysql] 無效。
  • 未重啟服務:修改配置檔後必須 systemctl restart mysqld 或 net restart mysql。
  • 舊資料已損毀:若資料寫入時字元集錯誤,資料已永久損毀,需從備份還原或重新匯入。

完整檢查清單

  1. 伺服器 my.cnf 設定 character-set-server=utf8mb4 並重啟。
  2. 資料庫/資料表/欄位字元集均為 utf8mb4。
  3. 應用程式連線字串含 useUnicode=true&characterEncoding=UTF-8。
  4. 終端機/IDE 主控台編碼為 UTF-8 (避免顯示端誤判)。
  5. 執行 SHOW VARIABLES LIKE 'character_set%'; 確認關鍵變數皆為 utf8mb4。

依序套用上述方案,可徹底解決 MySQL 中文亂碼問題。建議新專案一開始就統一採用 utf8mb4 避免後續麻煩。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved