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

MySQL 5 中文亂碼徹底解決:phpMyAdmin、建庫建表、連接字符集、系統級配置四層防線

     編輯:MySQL 綜合教學

現象

中文存入顯示為 ???、乱码、锟斤拷,查詢結果與存入不一致。

四層配置防線

1. phpMyAdmin 介面設置

  • 語言:Chinese simplified (zh-utf-8)
  • MySQL 字符集:UTF-8 Unicode (utf8)
  • MySQL 連接校對:utf8_general_ci(或 utf8mb4_general_ci)

2. 建庫建表顯式指定

CREATE DATABASE mydb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

CREATE TABLE mytbl (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

關鍵點: 表級、列級均可單獨覆蓋,建議統一庫/表/列均用 utf8mb4。

3. 應用連接層設置

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

-- PHP (PDO)
$pdo = new PDO('mysql:host=localhost;dbname=mydb;charset=utf8mb4', 'user', 'pass');

-- Java (JDBC URL)
jdbc:mysql://localhost:3306/mydb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai

-- Python (PyMySQL)
conn = pymysql.connect(charset='utf8mb4')

4. 服務器級配置 my.cnf

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'  # 不影響 root 等超級用戶

重啟驗證:

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

排查清單(由近及遠)

  1. 終端/控制台編碼是否 UTF-8(chcp 65001 / 終端設置)
  2. 應用讀寫連接是否執行 SET NAMES utf8mb4
  3. 表/列實際字符集(SHOW CREATE TABLE)
  4. 服務器默認字符集
  5. 數據導入文件編碼(file -i / Notepad++ 檢查)

utf8mb4 ≠ utf8。MySQL utf8 實為 utf8mb3(最多 3 字節),無法存儲 Emoji、生僻字。全鏈路統一 utf8mb4 是 2024+ 的標準配置。

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