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

MySQL 中文亂碼終極解決方案:建庫建表、導入導出、網頁顯示三大場景全覆蓋

     編輯:MySQL 綜合教學

MySQL 中文亂碼終極指南:建庫建表、資料導入、網頁顯示三場景標準化配置

MySQL 中文亂碼源於**編碼不一致**。本文提供三大高頻場景的標準化操作流程,從源頭杜絕亂碼,附編碼檢查指令與緊急修復方案。

場景一:建庫建表 — 從源頭鎖定編碼

-- 建庫指定 utf8mb4 (支援 Emoji)
CREATE DATABASE `my_db` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';

-- 建表指定 utf8mb4
CREATE TABLE `users` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `name` VARCHAR(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
**原則**:建庫、建表、欄位三層**統一 utf8mb4**,避免繼承錯誤編碼。

場景二:資料導入 — 編碼匹配是關鍵

資料檔編碼連線設定資料庫/表編碼導入指令
UTF-8 (無 BOM)SET NAMES utf8mb4;utf8mb4LOAD DATA LOCAL INFILE 'utf8.txt' INTO TABLE t;
GBK/ANSISET NAMES gbk;gbkLOAD DATA LOCAL INFILE 'gbk.txt' INTO TABLE t;
鐵律:UTF-8 檔**絕不可**用 GBK 連線導入,反之亦然。DOS 視窗不支援 UTF-8 顯示,導入前用編輯器確認檔案編碼。

場景三:網頁顯示 — 全鏈路 UTF-8

  1. my.cnf:character-set-server=utf8mb4、init_connect='SET NAMES utf8mb4'
  2. 連線字串:jdbc:mysql://...?useUnicode=true&characterEncoding=utf8mb4 (Java) / charset=utf8mb4 (PDO)
  3. 頁面:<meta charset="UTF-8"> + PHP header('Content-Type: text/html; charset=UTF-8')
  4. 程式碼檔案:以 **UTF-8 無 BOM** 儲存

編碼檢查指令速查

-- 1. 伺服器級編碼
SHOW VARIABLES LIKE 'character_set_%';
SHOW VARIABLES LIKE 'collation_%';

-- 2. 資料庫編碼
SHOW CREATE DATABASE my_db;

-- 3. 資料表編碼
SHOW CREATE TABLE users;

-- 4. 當前連線編碼
SHOW VARIABLES LIKE 'character_set_client';
SHOW VARIABLES LIKE 'character_set_connection';
SHOW VARIABLES LIKE 'character_set_results';

-- 5. 緊急修正連線編碼 (會話級)
SET NAMES utf8mb4;
-- 等同於
SET character_set_client = utf8mb4;
SET character_set_connection = utf8mb4;
SET character_set_results = utf8mb4;

網頁亂碼快速診斷流程圖

瀏覽器亂碼
   │
   ├─ 查看原始碼/Network Header → charset=UTF-8? → 否 → 加 meta/header
   │
   ├─ PHP 讀取變數直接 echo → 亂碼? → 是 → 連線未 SET NAMES / mysqli_set_charset
   │
   ├─ 資料庫客戶端 (Navicat/Workbench) 讀取 → 亂碼? → 是 → 表/欄位 CHARSET 錯誤 → ALTER TABLE ... CHARSET=utf8mb4
   │
   └─ 以上皆正常 → 檢查 PHP 檔案編碼 (需 UTF-8 無 BOM)

避坑清單

  • ❌ utf8 (MySQL 別名,實為 utf8mb3,**不支援 Emoji**)
  • ✅ utf8mb4 (真正 UTF-8,4 bytes,**支援所有 Unicode**)
  • ❌ SET NAMES utf8 (隱患)
  • ✅ SET NAMES utf8mb4 (標準)
  • ❌ 檔案存為 ANSI/GBK 後用 UTF-8 連線導入
  • ✅ 編輯器 (VS Code/Notepad++) 另存為 **UTF-8 無 BOM**
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved