事情有些複雜,是這樣的:
現狀:
數據庫:mysql,默認編碼為latin1,建庫用的默認編碼,所以是:latin1_swedish_ci;
site後臺為:ISO-8859-1;
site前臺為:UTF-8;
輸入:繁體中文;
目標:
把數據庫,後臺,編碼統一改為UTF-8
解決辦法:
得到了http://www.suixie.com/jianzhan/2007-05-26/65.html的提示,用最老實的辦法:select tableName INTO OUTFILE , LOAD DATA INFILE 的辦法,把兩個有中文的table導出文件,轉碼後再導入;
步驟:
- 導出數據庫。將old數據庫將數據庫結構導出,我用PHPMYADMIN,先MYSQL40模式,這樣導出的結構沒有charset=latin1_swedish_ci,如果有 latin1_swedish_ci的話,將 latin1_swedish_ci改為utf-8 ;
- 根據上面導出的數據庫結構建庫new,記得是建成utf-8編碼的,(一般來說是utf8-general_ci);
- 在命令行登錄mysql,進入old數據庫,執行:
select * into outfile 'e://test//tb.txt' FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY """" LINES TERMINATED BY "/r/n" FROM 要導出的表名(沒有引號);
這就可以看到e:/test/下有一個tb.txt文件,是導出的表的數據;
4.轉碼。因為我導出來的數據就是我看得出的中文,所以我倒是省了這一步。不過這個應該是不怎麼好弄吧?我試過用phpmyadmin導出的.sql文件,找了好幾個轉碼器都轉不了 !-_-
如果是亂碼,可以用轉換工具,比如convertz802來轉碼,這一步好似也是挺考驗的,因為要轉出來的tb.txt文件是utf-8編碼,並且裡邊的中文字正常的。
5.把文件再導入e://test//tb.txt數據庫new。LOAD DATA INFILE 'e://test//tb.txt' INTO TABLE database.new FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY """" LINES TERMINATED BY "/r/n";
在這之前,有可能需要執行以下命令:
set names 'utf8';
set character_set_database='utf8'; // 通過show variables like 'character_set_%';查詢