MySQL 升級後續 - 亂碼、編碼問題
| Posted at 九月 12, 2006 | 2個迴響 | 沒有引用 | 1793 reads. | Size: L, M, S || Under Service Soft. |
MySQL 升級到 4.1.x 以上的版本之後,會發現開始有個叫做連線校對的東西。因為從 4.1.x 之後,只剩下 UTF-8 一種編碼,連線校對只是看你的程式存進去的語言是什麼,最後都是用 UTF-8 來存。(這段有錯請指正!)
這 個時候,問題就來了,因為 4.0.x 之前的版本,通常預設的編碼都是 latin1,而把 latin1 編碼的檔案放進去,通常會有三種後果,一種是 phpMyAdmin 中看是正常,但是程式內卻是一堆亂碼;另一種就是 phpMyAdmin 中看是亂碼,但是程式內卻正常;當然也有的人更雖,前後都死。
其實這都是因為編碼不同的關係。最好的方法,就是把原本的資料、新的 MySQL 全部弄成 UTF-8,未來比較不會有問題,一勞永逸。
一開始我升級後用很鴕鳥的方式,把預設編碼改成了 latin1,想說正常就好,不過昨晚清空 Gallery2 快取後,才發現整個 Gallery2 全部都變成亂碼了,後台卻很正確。查了整個晚上,我暴氣了,決定全部把資料都轉為 UTF-8。
首先,唯一要確定的,是備份下來的 .sql 一定必須是正確沒問題的。最好的方法當然是升級前就備份下來,或者你也可以嘗試各種連線校對的編碼,看哪個匯出的 .sql 是可以在編輯程式內正確讀取的(最重要的當然是中文的部份)。
確定 OK 後,用編輯器打開你的 .sql,如果你是 MySQL 4.1.x 以上備份下來的,應該裡面會有很多個「CHARSET=latin1」,用取代的功能,全部改成「CHARSET=utf8」,這樣等等匯入之後,預設的編碼就會變成 UTF-8 了。好了之後,存檔上傳到主機。
接下來,利用 Mark 教的 方法,來匯入資料:
首先新增你要上傳的那個資料庫,將編碼選為「utf8_general_ci」。然後到主機下指令:
mysql -uname -ppassword -Ddbname --default-character-set=latin1 < XXX.sql
註一:黑色粗體字分別是 mysql 的 username、password、db name、sql dump file name。
註二:--default-character-set=XXX,一定要加,並且換成你當初 dump 下來的編碼,通常可能是 latin1。這樣就完成了,到你的 phpMyAdmin 去看看,應該可以正常顯示了。然後再到程式看看、發表看看,應該都沒問題了才對。