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

MySQL 中文亂碼問題完美解決方案:從根源徹底修正編碼設定

     編輯:MySQL 綜合教學

前言:被亂碼折磨的日子

最近在專案開發中,MySQL 中文亂碼問題像個頑固的幽靈,纏著我不放。好不容易徹底搞定,趁熱打鐵整理出這份「完美解決方案」,既供同行參考,也方便日後自己回顧查閱。

第一步:診斷現狀——查看當前字符集設定

一切從「知己知彼」開始。打開 MySQL 客戶端,執行以下兩條指令,檢查資料庫與伺服器端的字符集配置:

SHOW VARIABLES LIKE '%colla%';
SHOW VARIABLES LIKE '%char%';

若結果顯示均為 gbk2312 或 gbk,代表僅支援簡體中文,繁體字與特殊符號將無法正常寫入。此時必須將字符集統一修改為 UTF-8(MySQL 中寫作 utf8 或 utf8mb4)。

第二步:修改核心配置文件 my.ini (Windows) / my.cnf (Linux)

  1. 用記事本或 UE 編輯器打開 MySQL 安裝目錄下的 my.ini(Linux 通常在 /etc/my.cnf)。
  2. 搜尋 default-character-set,將後方數值改為 utf8。注意:客戶端與伺服器端兩處都要改。
  3. 儲存檔案,重啟 MySQL 服務。
  4. 再次執行上述兩條 SHOW VARIABLES 指令驗證,應看到所有相關變數均為 utf8 或 utf8_general_ci。

字符集修改後驗證結果

第三步:處理既有資料庫與資料表——my.ini 不會追溯既往

修改配置文件只影響新建的資料庫與資料表。舊有物件需手動轉換:

  • 檢視現狀:SHOW CREATE DATABASE `db_name`; / SHOW CREATE TABLE `tbl_name`;
  • 轉換資料庫:ALTER DATABASE `db_name` CHARACTER SET utf8 COLLATE utf8_general_ci;
  • 轉換資料表:ALTER TABLE `tbl_name` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;(CONVERT TO 會一併轉換欄位資料)

第四步:避開命令列(DOS/Terminal)的 UTF-8 顯示坑

修改為 UTF-8 後,在 MySQL 命令列下插入或查詢中文常顯示亂碼,但輸出到網頁或應用程式卻正常。這是因為 Windows 預設代碼頁不支援 UTF-8 顯示。

應對技巧:在命令列操作前先執行 SET NAMES gbk; 即可暫時用 GBK 寫入簡體中文(但無法寫入繁體/特殊符號);正式環境請務必在應用程式連線時設定 SET NAMES utf8 或連線參數 characterEncoding=utf-8。

第五步:新建資料庫/資料表時「一步到位」指定編碼

-- 建庫
CREATE DATABASE `test` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

-- 建表
CREATE TABLE `database_user` (
  `ID` VARCHAR(40) NOT NULL DEFAULT '',
  `UserID` VARCHAR(40) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

建庫、建表、連線三端編碼一致,基本杜絕亂碼根源。

第六步:資料匯入導出的編碼對齊鐵律

資料檔編碼連線設定資料庫/資料表編碼匯入指令範例
UTF-8SET NAMES utf8;UTF-8LOAD DATA LOCAL INFILE 'C:\\utf8.txt' INTO TABLE yjdb;
ANSI (GBK/GB2312)SET NAMES gbk;GBKLOAD DATA LOCAL INFILE 'C:\\gbk.txt' INTO TABLE yjdb;

切記:UTF-8 檔不可導入 GBK 庫,反之亦然;DOS 視窗不支援 UTF-8 顯示,僅影響觀感,不影響資料正確性。

第七步:Web 應用層的編碼統一

  1. 頁面宣告:<meta charset="utf-8">(HTML5)或 header("Content-Type: text/html; charset=utf-8");(PHP)。
  2. JDBC 連線串加參數:?useUnicode=true&characterEncoding=utf-8。
  3. 建立連線後立即執行:SET NAMES utf8(或 utf8mb4)。

若專案已長期運行且無法改動既有 GBK 資料,可將頁面編碼設為 GBK(支援較多漢字),但強烈建議新專案直接上 UTF-8/utf8mb4,一勞永逸支援全球字符。

核心口訣:三端一致、新建指定、既有轉換、匯入對齊、命令列知曉限制

遵循這套流程,MySQL 中文亂碼將不再是開發路上的絆腳石。

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