標籤:ar sp for on 檔案 資料 問題 bs ad
phpMyAdmin版本是2.9.1.1
用phpMyAdmin備份資料庫,匯出來後,在本地用sqlyog還原的時候,出現如下錯誤:
Error occured at:2009-03-03 10:09:43
Line no.:11154
Error Code: 1062 - Duplicate entry ‘??????‘ for key 2
開啟sql檔案看了下,會員表下的會員使用者名稱是亂碼,全都是類似於???,????的,因為現在很多程式都支援中文使用者名稱了,而使用者名稱又是唯一的,中文使用者名稱變成亂碼後,就出現很多相同的使用者名稱,而我們匯入這些出現亂碼的資料時,前面已經有??????這個使用者名稱了,所以下面出現第二個就報錯了
如果有系統的控制權,可以用如下命令匯出資料,就不會出現亂碼,還原時是正常的
mysqldump -uroot -p --default-character-set=utf8 --set-charset --skip-opt dbname > newdbname.sql
但現在只能用phpMyAdmin匯出,測試了好久,發現如果phpMyAdmin的Language為"中文-chinese simplified-gb2312"時,匯出來的sql檔案是gb2312的,某些表裡有中文,中文為亂碼,當phpMyAdmin的Laguage為"中文-chinese simplified(也就是utf8)"時,匯出來的sql檔案字元集是utf8的(用Notepad++查看格式,顯示是UTF-8無BOM格式編碼),表裡的中文可以正常顯示
所以,為避免匯出來的檔案裡中文是亂碼,可以從Language下拉式功能表中,選擇中文-chinese simplified,然後再選擇匯出,下載回來的sql檔案中的中文就可以正常顯示了。
用如下命令還原
mysql -uroot -p --default-character-set=utf8 newdbname < newdbname.sql
本來想把phpMyAdmin的預設Language修改為“中文-chinese simplified",但試過修改config.inc.php和libraries目錄下的config.default.php都沒有用,沒關係了,畢竟不同人選擇資料庫的編碼都不一樣的,總是有人要重新選擇一下語言,還是讓它預設是“中文-chinese simplified-gb2312”吧!
猜測另外一種解決辦法是,匯出來的檔案編碼是gb2312,所以可以考慮將gb2312轉換為utf8.此方法實驗中。
phpmyadmin匯出資料中文亂碼問題