模拟数据库的数据乱码解决方法

模拟数据库中数据乱码

背景:公司业务数据book,由于之前建表没注意字符集的问题,导致之前写入的数据出现乱码。现在要将之前的数据和现在数据的字符集一致,不出现乱码情况,将字符集为latin1已有记录的数据转成utf8,并且已经存在的记录不乱码。

步骤

          1:建库及建表的语句导出,修改为utf8

          2:导出之前所有的数据

          3:修改mysql服务端和客户端编码为utf8

          4:删除原有的库表及数据

          5:导入新的建库及建表语句

          6:导入之前的数据

操作实验:

1、 首先确保该数据库服务器的默认字符集是utf8
修改/etc/my.cnf配置文件中character-set-sever=utf8,重启MySQL服务
#vim /etc/my.cnf
character-set-server=utf8
重启MySQL服务
2、 在shell命令行将原有的book库删掉
[root@MySQL ~]# mysql -uroot -p123456 -e “drop
database book;”
在这里插入图片描述
3、 在shell命令行创建一个book库
[root@MySQL ~]# mysql -uroot -p123456 -e “create
database book;”
在这里插入图片描述
4、 将book_latin1.sql表导入book表中模拟数据乱码
[root@MySQL ~]# mysql -uroot -p123456
book<book_latin1.sql
在这里插入图片描述
5、 查看books表的字符集默认的并不是utf8字符集
[root@MySQL ~]# mysql -uroot -p123456 -e “show create
table book.books;”在这里插入图片描述在这里插入图片描述
6、 查看books表中的数据会发现数据乱码
[root@MySQL ~]# mysql -uroot -p123456 -e “select *
from book.books;”
在这里插入图片描述
7、 先将表结构导出
[root@MySQL ~]# mysqldump -uroot -p123456
–default-character-set=latin1 -d book>booktable.sql
在这里插入图片描述
8、 编辑booktable.sql将latin1修改成utf8在这里插入图片描述
9、 确保数据库不再更新,导出所有数据
[root@MySQL ~]# mysqldump -uroot -p123456 --quick
–no-create-info --extended-insert --default-character-set=latin1
book>bookdata.sql
在这里插入图片描述
参数说明:
–quick:用于转储较大的表,强制mysqldumpco能够服务器一次一行的检索数据而不是检索所有行,并输出当前cache到内存中;

–no-create-info:不要创建create table语句;

–extended-insert:使用包括几个values列表的多行insert语法,这样文件更小,IO也小,导入数据时会非常快;

–default-character-set=latin1:按照原有字符集导出数据,这样导出的文件中,所有中文都是可见的,不会保存成乱码。

10、ookdata.sql将SET NAMES latin1修改成SET NAMES utf8
[root@MySQL ~]#
vim bookdata.sql在这里插入图片描述
11、 book2库并将该库的默认字符集设置成utf8
[root@MySQL ~]# mysql -e “create database book2
default charset utf8;” -uroot -p123456
在这里插入图片描述
12、 建立表并导入表结构
[root@MySQL ~]# mysql -uroot -p123456
book2<booktable.sql
在这里插入图片描述
13、 导入数据
[root@MySQL ~]# mysql -uroot -p123456 book2<bookdata.sql
在这里插入图片描述
14、 查看book.books中的默认字符集是否已更改
[root@MySQL ~]# mysql -uroot -p123456 -e “show create
table book2.books;”
在这里插入图片描述
15、 查看表内容
[root@MySQL ~]# mysql -uroot -p123456 -e “select *
from book2.books;”
在这里插入图片描述

发布了3 篇原创文章 · 获赞 7 · 访问量 191

猜你喜欢

转载自blog.csdn.net/weixin_45993802/article/details/103926848
今日推荐