2016年5月8日 星期日

MySQL 中文亂碼解決方法

mysql 會出現中文亂碼的原因不外乎下列幾點:
  1. mysql server本身設定問題,例如還停留在 latin1
  2. mysql table 的語系設定問題(包含 character 與 collation)
  3. 客戶端程式(例如 php) 的連線語系設定問題


mysql 4.1 及之後的版本在語系方面增加了許多功能,它可以設定語系的層次從最底層的 server, database 到單一table, column, connection 都可以設定而除了語系之外,還可以指定搭配不同的collation(校對)所以組合百百種,只要一個錯了就難逃亂碼的命運。

進phpmyadmin找到可輸入 sql query的畫面然後鍵入:

show variables like '%character%';

這句話會顯示目前資料庫使用的語系設定,一般國外的網站或剛裝好的 mysql 4.1預設都是 latin-1。

新增資料庫

如果熟悉 phpmyadmin 的操作在畫面上就可以選擇建立新 database 要用的語系,
charset 選擇 UTF-8 Unicode (utf8)
collation 選擇 utf8_general_ci (ci 代表 case insensitve 大小寫沒差)

修改資料庫

改 database語系,同樣在 phpmyadmin 的query畫面鍵入下面兩行:

alter database myblog
character set utf8;


前面曾經提過,mysql的語系設定是多層次的,前面我們把database與table的語系都設定正確,但程式與mysql連線時的語系則是由 connection 來決定,這部份就要使用程式碼

mysql_query("SET NAMES 'utf8'");

這句話會同時設定 client, results, connection三者使用的語系為 utf-8。


最後檢查是否全部改成 utf-8 
show variables like '%character%';

沒有留言:

張貼留言