◎ PHP 與 MySQL 建立連線:
所以為了解決亂碼問題,在PHP 與 MySQL 建立連線時,於 query 之前先執行:
mysql_query("SET CHARACTER_SET_CLIENT=utf8");
mysql_query("SET CHARACTER_SET_CONNECTION=utf8");
mysql_query("SET CHARACTER_SET_RESULTS=utf8");
如上三列編碼都一樣時,可直接執行下列
mysql_query("SET NAMES utf8");
◎ MySQL資料庫big5轉utf8:
Step1:首先把資料dump出來
由於先前資料是存成latin1,所以dump出來後要用iconf或piconf把他轉成UTF-8,記得dump出來時要加上-default-character-set=latin1
#mysqldump -u 帳號 -p --default-character-set=latin1 資料庫 >output.sql
Step2:big5轉成utf8
如果原先是Big5的資料, dump出來後就直接把Big5轉成UTF-8即可
#piconv -f big5 -t utf8 output.sql >utf8.sql
如果原先是UTF-8的資料,dump出來後要先轉成Big5後,再把他轉成UTF-8,因為原先dump出來的是偽裝成UTF-8的lantin1不是真正的UTF-8
#mysqldump -u 帳號 -p -default-character-set=latin1 資料庫 >output.sql
#piconv -f utf8 -t big5 output.sql > big5.sql
#piconv -f big5 -t utf8 big5.sql >utf8.sql
Step3:修改sql檔
1、修改轉成的sql檔中所產生的‘’\”及換行的問題(有時換行時會成‘\n’)
2、在dump出來的sql檔最前面加上:
SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;
:1,$s/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/g
:1,$s/latin1/utf8/gc
:1,$s/許\\/許/g
:1,$s/功\\/功/g
:1,$s/蓋\\/蓋/g
:1,$s/餐\\/餐/g
:1,$s/愧\\/愧/g
:1,$s/擺\\/擺/g
:1,$s/穀\\/穀/g
:1,$s/淚\\/淚/g
:1,$s/豹\\/豹/g
:1,$s/珮\\/珮/g
:1,$s/俞\\/俞/g
再來把每個資料表後面的TYPE=MyISAM是否有DEFAULT CHARSET=latin1;
若沒有請改為ENGINE=MyISAM DEFAULT CHARSET=utf8;
Step4:建立新的資料庫
方法1. SQL語法
CREATE DATABASE `資料庫` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
方法2. 用phpMyAdmin建立資料庫的,建立時”校對”要選utf8_general_ci
步驟五:import資料
方法1. SQL語法
#mysql -u 帳號 -p 資料庫 < utf8.sql
方法2. 直接用phpMyAdmin把他import進去了,import時記得文字編碼檔案要選utf8即可。不過使用phpMyAdmin import 有檔案大小的限制,可先把sql檔分成幾個檔案。
◎ 最後記得檢查看MySQL的my.cnf設定檔內要加入以下設定
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci