Mysql 4.0 up 4.1 or 5.1資料庫移轉

自己遇到的問題
01.把資料庫dump出來
mysqldump -u root -p --default-character-set=latin1 drupal > drupal.sql

02.修改資料表資料
sed -i -e 's/latin1/utf8/g' drupal.sql

03.把舊的資料刪掉,並新增一個資料庫(drupal)
我直接在phpmyadmin刪掉,並新增一個新的資料庫

04.匯入改好後的資料
mysql -u root -p drupal < drupal.sql

twpug.net站長的解法
有一個過去的資料庫是建立在 MySQL 4.0.24 ,當時並不需要設定文字的編碼,所以都是使用預設的 latin1 建立,而儲存的文字資料是 utf-8 編碼;剛剛直接將它移到 MySQL 5.0.33 時發現透過舊有 PHP 程式存取並沒有問題,方式是直接將 mysql/data 中關於與資料庫同名的資料夾直接複製到新版中。接著希望將它調整成符合新版規範的格式,也就是將文字的校對調整為 utf8 ,預設的匯出指令中,輸出的中文字都會變成亂碼:

mysqldump -uroot -p my_db > test.sql


下面是 status 指令的輸出:

Server version: 5.0.33 Source distribution
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1


找了一下網路,發現下面這篇文章:
http://confluence.atlassian.com/display/DOC/Configuring+Database+Character+Encoding

用其中的指令可以順利產生正確的中文輸出:

mysqldump -uroot -p --default_character-set=latin1 --skip-set-charset my_db > test.sql



接著透過文字編輯器將檔案中所有的
DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
改為
DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

collate latin1_general_ci
改為
collate utf8_unicode_ci

最開始的地方加上下面這行:
set names utf8;

然後將檔案塞回資料庫就 OK 了

留言

熱門文章