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

MySQL 5.0.16 亂碼問題徹底解決:phpMyAdmin 設定、資料庫建表字元集、連線層配置、Linux/Windows 差異

     編輯:MySQL 資料庫相關知識

問題背景

MySQL 5.0.16 時代常見亂碼:中文存入變問號、讀出亂碼、排序錯誤。根因:伺服器、資料庫、表、欄位、連線五層字元集不一致。

五層統一配置策略 (GBK 方案 - 歷史專案適用)

1. phpMyAdmin 介面設定

  • 語言:Chinese Simplified (zh-utf-8)
  • MySQL 字符集:UTF-8 Unicode (utf8)
  • MySQL 連線校對:gbk_chinese_ci

2. 建立資料庫時指定校對


CREATE DATABASE mydb DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

3. 建表時明確指定字元集


CREATE TABLE mytable (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;

-- 或 InnoDB
CREATE TABLE mytable (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100)
) ENGINE=InnoDB DEFAULT CHARSET=gbk AUTO_INCREMENT=40;

4. 檢查表結構欄位校對屬性

  • VARCHAR/CHAR/TEXT 欄位:校對屬性統一為 gbk_chinese_ci
  • 數值/日期/二進位欄位:校對屬性為空 (不適用)

5. 程式碼連線層強制設定 (Linux 環境必要)


# PHP
$db->query("SET CHARACTER SET GBK");
# 或
$db->query("SET NAMES GBK");

# 相當於設定 Connection Character Sets and Collations

⚠️ Windows 環境下 PHP 通常不需此步 (預設字元集相容)。

現代標準:UTF8MB4 完整配置 (新專案強制)

伺服器配置 (my.cnf)


[client]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
innodb_large_prefix = ON
innodb_file_format = Barracuda
innodb_file_per_table = ON

資料庫/表建立


CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE mytable (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

連線字串


# JDBC
jdbc:mysql://host:3306/mydb?useUnicode=true&characterEncoding=utf8mb4

# PHP PDO
$pdo = new PDO("mysql:host=localhost;dbname=mydb;charset=utf8mb4", $u, $p);

# PHP mysqli
$mysqli->set_charset('utf8mb4');

驗證命令


STATUS;
# 必須全為 utf8mb4 (或 gbk 歷史專案)
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

遷移檢查清單

  1. 備份:mysqldump --default-character-set=gbk --all-databases > backup.sql
  2. 修正備份檔字元集宣告
  3. 調整 my.cnf 為 utf8mb4
  4. 重啟服務、建立新 utf8mb4 資料庫
  5. 匯入備份、全鏈路測試 (含 Emoji 😀、生僻字 𠮷)
  6. 更新應用連線字串

常見誤區

  • ❌ 僅修改表字元集,未修改資料庫預設與伺服器預設
  • ❌ 連線字串缺少 characterEncoding
  • ❌ 使用 utf8 (實為 utf8mb3) 而非 utf8mb4
  • ❌ 遷移後索引過長未開啟 innodb_large_prefix
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved