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

MySQL 字符集完整指南:從伺服器到連接層的編碼設定與亂碼解決

     編輯:MySQL 資料庫相關知識

MySQL 字符集支援架構與配置最佳實踐

MySQL 字符集支援分兩面向:字符集 與 排序規則,細化至四層級:伺服器、資料庫、資料表、連接。

1. 預設字符集繼承鏈

  1. 編譯時指定:預設 latin1。
  2. 安裝配置 my.ini:可覆蓋,通常安裝程式會設為 UTF-8。
  3. 啟動參數:可再覆蓋,設定 character_set_server。
  4. 建立資料庫:預設繼承 character_set_server。
  5. 選擇資料庫:設定 character_set_database。
  6. 建立資料表:繼承資料庫預設字符集。
  7. 建立欄位:繼承資料表預設字符集。

結論: 若安裝選擇多語言支援 (UTF-8),全鏈路預設皆為 UTF-8。

2. 查看當前字符集設定

SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation_%';

關鍵變數:character_set_client、character_set_connection、character_set_database、character_set_results、character_set_server、character_set_system (固定 utf8)。

3. 修改預設字符集

方法一:修改 my.ini (永久,需重啟)

[mysqld]
default-character-set = utf8
character_set_server = utf8

[client]
default-character-set = utf8

方法二:會話級命令 (臨時)

SET character_set_client = utf8;
SET character_set_connection = utf8;
SET character_set_database = utf8;
SET character_set_results = utf8;
SET character_set_server = utf8;
SET collation_connection = utf8_general_ci;
SET collation_database = utf8_general_ci;
SET collation_server = utf8_general_ci;

4. 關鍵:連接層編碼與 SET NAMES

即使資料庫/表設為 UTF-8,若連接層編碼錯誤,寫入仍會亂碼。必須在查詢前執行:

SET NAMES 'utf8';
-- 等同於:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

5. JDBC 連接字串指定編碼

jdbc:mysql://192.168.3.99:3306/test?useUnicode=true&characterEncoding=gbk

6. 常用字符集檢視命令

  • SHOW VARIABLES LIKE '%char%'; — 伺服器/資料庫/客戶端字符集
  • SHOW TABLE STATUS FROM db LIKE 'table%'; — 資料表字符集
  • SHOW FULL COLUMNS FROM table; — 欄位字符集
  • SHOW CHAR SET; — 目前安裝支援的字符集列表

總結

  1. 正確設定資料庫編碼 (建庫/建表時指定 UTF-8)。
  2. 正確設定連接編碼 (JDBC 連接串、PHP mysql_set_charset、或執行 SET NAMES utf8)。

版本差異 (3.x/4.0/4.1+) 不重要,關鍵在這兩點設定正確。

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