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

Windows 環境 MySQL 中文亂碼快速修復三步走

     編輯:MySQL 資料庫相關知識

現象

插入中文顯示 ??? 或亂碼,SHOW VARIABLES LIKE 'character%'; 多項為 latin1。

步驟 1:會話級驗證(臨時)

mysql> SET character_set_server = utf8;
mysql> SET character_set_database = utf8;
mysql> SET character_set_connection = utf8;
mysql> SET character_set_client = utf8;
mysql> SET character_set_results = utf8;

若此後插入正常,說明編碼不匹配是根因。

步驟 2:修改 my.ini 永久生效

找到 MySQL 安裝目錄下 my.ini(如 C:\Program Files\MySQL\MySQL Server 5.7\my.ini),在三個區塊**全部**加入:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
init_connect='SET NAMES utf8'

重啟服務:

net stop mysql
net start mysql

步驟 3:應用層配合

  • Java (JDBC): URL 加 ?characterEncoding=utf8&useSSL=false
  • PHP: mysqli_set_charset($link, 'utf8'); 或 PDO DSN charset=utf8
  • Python: charset='utf8' 參數
  • 網頁: `` + HTTP Header `Content-Type: text/html; charset=utf-8`
  • 檔案: 所有 .sql/.php/.java 檔案另存為 UTF-8(無 BOM)。

驗證

mysql> SHOW VARIABLES LIKE 'character%';
-- 確認 client/connection/database/results/server 均為 utf8
mysql> INSERT INTO t(name) VALUES('測試中文');
mysql> SELECT * FROM t;  -- 應正常顯示

常見遺漏

遺漏點後果
未改 [client] 區塊mysqldump 導出亂碼
未改 [mysql] 區塊命令列互動亂碼
應用端未 SET NAMES寫入仍為 latin1
JDBC URL 缺 characterEncoding驅動按預設 latin1 解碼
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved