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

MySQL 插入中文亂碼終極解決:5 種實戰方案與字符集最佳實踐

     編輯:MySQL 資料庫相關知識

亂碼根因

客戶端、連線、伺服器、資料庫、資料表、欄位六層字符集不一致,導致編碼轉換錯誤。核心原則:**全鏈路統一為 UTF-8(或 utf8mb4)**。

五種快速修復方案(按推薦度排序)

方案一:會話級 SET NAMES

mysql> SET NAMES latin1;  -- 或 utf8
mysql> SOURCE test.sql;

臨時生效,適合一次性匯入腳本。

方案二:SQL 檔案內嵌 SET NAMES

-- test.sql 開頭
SET NAMES latin1;
INSERT INTO ...;
mysql> SOURCE test.sql;

方案三:命令列管道導入指定字符集

mysql -uroot -p123456 --default-character-set=latin1 test < test.sql

不需修改 SQL 檔,適合自動化部署腳本。

方案四:my.cnf/my.ini 永久配置(生產環境首選)

[client]
default-character-set=utf8

[mysqld]
# 5.1 以前
default-character-set=utf8
# 5.5+ 推薦
character-set-server=utf8
collation-server=utf8_general_ci

修改後**重新登入**即可生效(無需重啟服務)。

方案五:建庫建表顯式指定(根治源頭)

CREATE DATABASE wyb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE t (c VARCHAR(100)) CHARSET=utf8mb4;

強烈建議使用 utf8mb4** 完整支援 Emoji 及罕見漢字,避免 utf8 截斷 4 字節字符。

字符集系統變數速查

SHOW VARIABLES LIKE 'character_set%';
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| character_set_client     | utf8   |  -- 客戶端發送編碼
| character_set_connection | utf8   |  -- 連線轉換編碼
| character_set_database   | utf8   |  -- 預設庫編碼
| character_set_results    | utf8   |  -- 結果集回傳編碼
| character_set_server     | utf8   |  -- 伺服器預設編碼
+--------------------------+--------+

SET NAMES utf8 等同於同時設定 client、connection、results 三個變數。

避坑清單

  1. JDBC/ODBC/PHP 連線字串需顯式 `characterEncoding=utf8`。
  2. HTML 頁面 ``、HTTP Header `Content-Type: text/html; charset=utf-8`。
  3. 資料庫備份/還原時保持字符集一致,避免 `mysqldump --default-character-set` 參數缺失。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved