您好,登錄后才能下訂單哦!
本實驗的環境:
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)打開dataanguo.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數據庫開發、優化與管理維護
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。