latin1字符集的数据转换为utf8字符集

举报
snowofsummer 发表于 2022/01/21 10:29:05 2022/01/21
【摘要】  下面模拟把latin1字符集的数据转换为utf8字符集一、创建测试表和测试数据:1.修改会话级别的连接字符集mysql > set names latin1;查看一下: \s2.创建测试表:mysql> create database test_latin1 charset latin1;Query OK, 1 row affected (0.00 sec)mysql> use test_...

 

下面模拟把latin1字符集的数据转换为utf8字符集
一、创建测试表和测试数据:
1.修改会话级别的连接字符集
mysql > set names latin1;
查看一下:
 \s
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字符集不支持的那部分汉字数据。

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。