原數(shù)據(jù)庫4.0
頁面編碼gb2312
數(shù)據(jù)庫默認編碼latin1
新數(shù)據(jù)庫5.1
頁面編碼utf-8
數(shù)據(jù)庫編碼utf8
導出舊數(shù)據(jù)庫結構(mysql4)
#./bin/mysqldump -uroot -d olddb > /tmp/olddb_create_table.sql
導出數(shù)據(jù),不含結構
#./bin/mysqldump -uroot -t --default-character-set=gb2312 olddb > /tmp/olddb_data.sql
建立新數(shù)據(jù)庫(mysql5)
#./bin/mysql -uroot
#>create database newdb default character set utf8;
#>use newdb;
導入數(shù)據(jù)庫表結構
#>source /sqldata/olddb_create_tabe.sql;
導入數(shù)據(jù)庫數(shù)據(jù)
#>set names gb2312;
#>source /sqldata/olddb_data.sql;
大功告成。
需要一致的編碼我均用顏色高亮。
注:
mysql4中,不管數(shù)據(jù)庫如何編碼,php頁面寫入的是gb2312的資料,那么導出的時候使用gb2312編碼導出即可還原正確gb2312編碼腳本。
mysql5中,不管數(shù)據(jù)庫編碼如何,你導入的sql腳本是gb2312的,那么盡管使用gb2312的鏈接校隊向數(shù)據(jù)庫寫東西。
說一下為什么要分開導出和導入
當你需要導出gb2312的腳本,你勢必要加上--default-character-set參數(shù),這樣一來,導出的腳本后面會有討厭的create table()charset=gb2312;出現(xiàn),向新數(shù)據(jù)庫導入的時候這些東西是必須去掉的,而當數(shù)據(jù)庫龐大至100M以上,去掉這些東西并不是很容易。因此分開導出。保證結構干凈,數(shù)據(jù)正確。
mysql5 之間 不同編碼轉化看這里
我都是以自己的操作作為記錄
mysql5 latin1 存儲的gb2312數(shù)據(jù)
目標 mysql5 gbk
#my=/usr/local/amp/mysql5/bin
#$my/mysqldump -uroot -p -d --default-character-set=latin1 dbname > ~/db_table.sql
#$my/mysqldump -uroot -p -t --default-character-set=latin1 dbname > ~/db_data.sql
這樣導出來的sql會是gb2312的,打開看,就是漢字,沒亂碼
但是別忘了vi ~/db_table.sql
并且替換 :%s/ DEFAULT CHARSET=Latin1//g
#$my/mysql -uroot -p
>create newdb default character set gbk;
>use newdb;
>set names gbk;
>source ~/db_table.sql
>source ~/db_data.sql