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

MySQL 4.1 亂碼終極解決方案:UTF-8 全鏈路設定指南

     編輯:MySQL 資料庫相關知識

問題根源

MySQL 4.1 強化多語言支援,預設字元集為 UTF-8。phpMyAdmin 2.6 強制 UTF-8 介面,若資料實為 Big5/GB2312,全鏈路不一致必然亂碼。

解決方案:統一全鏈路為 UTF-8

1. 修改伺服器設定 /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
default-character-set=utf8

[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

關鍵:default-character-set=utf8

2. 重啟 MySQL

/etc/init.d/mysqld restart

3. phpMyAdmin 介面設定

  • 語言:Chinese Simplified (zh-utf-8)
  • MySQL 連線校對:utf8_general_ci
  • 查看「伺服器變數與設定」確認全部為 utf8:
character_set_client     utf8
character_set_connection utf8
character_set_database   utf8
character_set_results    utf8
character_set_server     utf8
character_set_system     utf8
collation_connection     utf8_general_ci
collation_database       utf8_general_ci
collation_server         utf8_general_ci

為什麼不直接用 GB2312/Big5?

phpMyAdmin 2.6 在 MySQL 4.1 下僅支援 UTF-8 介面,強制改其他字元集反而亂碼。MySQL 3.23 時代 phpMyAdmin 才有 Big5 選項。

匯入舊資料 (Big5/GB2312) 正確姿勢

方法一:phpMyAdmin 匯入

匯入頁面左下角 「檔案字元集」 選 GB2312 或 Big5 (預設 UTF-8 會亂碼)

方法二:命令列匯入

在 SQL 檔案最前面加入:

SET NAMES 'gb2312';

再執行:

mysql -u 用戶 -p 密碼 資料庫名 < 檔案.sql

匯出資料轉碼

  • phpMyAdmin 匯出:介面正常則匯出正常
  • mysqldump 匯出亂碼:用 iconv 轉碼
iconv -c -f UTF-8 -t GB2312 舊檔.sql > 新檔_gb2312.sql

關鍵指令速查

用途指令
連線後設定字元集SET NAMES 'utf8'; 或 SET NAMES 'gb2312';
檢視目前字元集狀態SHOW VARIABLES LIKE 'character_set_%';
匯入前聲明編碼SQL檔首行加 SET NAMES 'gb2312';
檔案編碼轉換iconv -c -f UTF-8 -t GB2312 ...

防亂碼三原則

  1. 資料庫、表、欄位、連線、應用程式、網頁編碼 全鏈路一致
  2. 匯入舊資料必須聲明 SET NAMES 或 phpMyAdmin 選正確字元集
  3. 保留原始備份,亂碼可用 iconv 救援
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved