mysql 會出現中文亂碼的原因不外乎下列幾點:
- mysql server本身設定問題,例如還停留在 latin1
- mysql table 的語系設定問題(包含 character 與 collation)
- 客戶端程式(例如 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%';
沒有留言:
張貼留言