標籤:mysql字元集修改
本實驗的環境:
linux系統:
cat /etc/redhat-release
CentOS release 6.5 (Final)
資料庫環境:
select version();
+------------+
| version() |
+------------+
| 5.5.32-log |
+------------+
類比的是將latin1字元集資料庫修改UTF-8字元集的資料庫的過程
建立latin1字元集的資料庫:
mysql> create database anguo default character set = latin1 default collate = latin1_swedish_ci;
Query OK, 1 row affected (0.00 sec)
建立latin1字元集的表:
create table student(id int(4) not null auto_increment,name varchar(20),primary key(id)) default character set = latin1 default collate = latin1_swedish_ci;
set names latin1;
insert into student(name) values(‘zhang‘),(‘he‘),(‘hou‘),(‘liu‘),(‘安果‘),(‘張三‘);
修改步驟:
1)匯出表結構
mysqldump -uroot -pmysql -S /data/3306/mysql.sock --default-character=utf8 -d anguo>/data/backup/createanguo.sql
其中 –default-character=utf8表示設定以什麼字元集串連,-d表示只匯出表結構不匯出資料
2)手工修改createoldboy.sql中表結構定義的字元集為新的字元集
sed -i ‘s/latin1/utf8/g‘ /data/backup/createanguo.sql
注意:批量替換的時候確保相關欄位裡面沒有latin1相關的字元。
3)確保記錄不再更新,匯出所有記錄
mysqldump -uroot -pmysql -S /data/3306/mysql.sock --quick --no-create-info --extended-insert --default-character-set=latin1 anguo >/data/backup/dataanguo.sql
--quick:該選項用於轉儲大的表,它前置mysqldump從伺服器一次一行地檢索表中的行而不是檢索所有行,並在輸出前將它緩衝到記憶體中
--extended-insert: 使用包括幾個values列表的多行insert文法,這樣使轉儲檔案更小,重載檔案時可以快速插入
--no-create-info:不到出每個轉儲表的create table語句
--default-character-set=latin1: 按照原有的字元集匯出所有資料,這樣匯出的檔案中,所有中文都是可見的,不會儲存成亂碼
4)開啟dataoldboy.sql,將set names latin1修改成set names utf8
sed -i ‘s/latin1/utf8/g‘ /data/backup/dataanguo.sql
注意:批量替換的時候確保相關欄位裡面沒有latin1相關的字元。
5)使用新的字元集建立資料庫
create database anguo default character set = utf8 default collate = utf8_general_ci;
6)建立表,執行createoldboy.sql
mysql -uroot -pmysql -S /data/3306/mysql.sock anguo < /data/backup/createanguo.sql
7)匯入資料,執行初始化
mysql -uroot -pmysql -S /data/3306/mysql.sock anguo < /data/backup/dataanguo.sql
註:部分內容參考深入淺出MySQL資料庫開發、最佳化與管理維護
本文出自 “HELLO 小孩” 部落格,請務必保留此出處http://xueanguo.blog.51cto.com/8618805/1773716
mysql字元集修改