latin1字符集的數據轉換為utf8字符集


下面模擬把latin1字符集的數據轉換為utf8字符集

一、創建測試表和測試數據:

1.修改會話級別的連接字符集

mysql > set names latin1;

查看一下:

 

 

2.創建測試表:

mysql> create database test_latin1 charset latin1;
Query OK, 1 row affected (0.00 sec)

mysql> use test_latin1;
Database changed
mysql> create table test_latin1(test varchar(20)) charset latin1;;
Query OK, 0 rows affected (0.01 sec)

 

3.插入測試數據:

mysql> insert into test_latin1 values('啊'),('撥'),('吃');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0


mysql> select * from test_latin1;
+------+
| test |
+------+
| 啊   |
| 撥   |
| 吃   |
+------+
3 rows in set (0.00 sec)

 

4.另外打開一個終端,查詢這個表,你會發現是亂碼,因為默認字符集是utf8:

mysql> select * from test_latin1;
+---------+
| test    |
+---------+
| 啊     |
| 拨     |
| 僠    |
+---------+
3 rows in set (0.00 sec)

 

二、開始把已有數據進行字符集轉換操作

1. 導出表結構(-d表示只導出表結構,不導出數據):

shell > mysqldump --master-data=2 --single-transaction -R --trigger -u root -p'xxx --default-character-set=utf8 -d test_latin1 test_latin1 > test_latin1.sql

 

2.  修改createdb.sql文件中所有的表結構定義中的lantin1為utf8

 

3.  確保記錄不再被更新,導出所有的記錄(不導出建表語句,並按照原有字符集導出數據)

shell > mysqldump --master-data=2 --single-transaction -R --trigger -u root -p'xxx' --quick --no-create-info --extended-insert --default-character-set=latin1  test_latin1 test_latin1 > data.sql

 

4.  修改data.sql文件,將set names latin1修改為set names utf8:

 

5.  使用新的字符集utf8創建數據庫

mysql > create database test_latin1 default charset utf8;

 

6. 創建表

shell > mysql -u root -p ‘xx’ test_latin1 < test_latin1.sql

 

7. 導入數據

shell > mysql -u root -p ‘x’ test_latin1 < data.sql

查詢建庫表結構: 

 mysql> show create database test_latin1;
+-------------+----------------------------------------------------------------------+
| Database    | Create Database                                                      |
+-------------+----------------------------------------------------------------------+
| test_latin1 | CREATE DATABASE `test_latin1` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+-------------+----------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show create table test_latin1;
+-------------+-----------------------------------------------------------------------------------------------------+
| Table       | Create Table                                                                                        |
+-------------+-----------------------------------------------------------------------------------------------------+
| test_latin1 | CREATE TABLE `test_latin1` (
  `test` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------------+-----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

 

查詢數據:
mysql> select * from test_latin1;
+------+
| test |
+------+
| 啊   |
| 撥   |
| 吃   |
+------+
3 rows in set (0.00 sec)

注意:選擇新的字符集的時候,要注意選擇新的字符集最好要比原來的字符集更大,即包含原來的字符集字庫,否則,可能出現新的字符集中丟失一部分數據,變成亂碼,如:GBK字符集字庫大於GB2312,如果把GBK改為GB2312,那么數據導入GB2312字符集的數據庫中,就會丟失GB2312字符集不支持的那部分漢字數據。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM