记一次数据库迁移(迁移数据)

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

操作步骤:

  1. 建库及建表的语句导出,修改为 utf8
  2. 导入之前的数据
  3. 导入新的建库及建表语句
  4. 删除原有的库表及数据
  5. 修改 mysql 服务端和客户端编码为 utf8
  6. 导出之前所有的数据

设置数据库字符集为 utf8

修改/etc/my.cnf 配置文件中 character-set-server=utf8,重启 mysql

[root@ weiyi~]# vim /etc/my.cnf

character-set-server=utf8

[root@weiyi ~]# systemctl restart mysqld 

查看 books 表的字符集

Mysq> show create table book.books ;

或者在shell环境 mysql -uroot -p123456 -e “show create table book.books;”

 

查看表内容 

mysql>mysql -uroot -p123456 -e “select * from books”

 导出数据表结构

[root@weiyi ~]# mysqldump -uroot -p123456 --default-character-set=latin1 -d book> booktable.sql

编辑 booktable.sql 将 latin1 修改成 utf8

[root@ weiyi~]# vim booktable.sql

 ​​​​​​​确保数据库不再更新,导出所有数据

[root@weiyi ~]# mysqldump -uroot -p123456 --quick --no-create-info --extended-insert --default-character-set=latin1 book>bookdata.sql

--quick:用于转储大的表,强制 mysqldump 从服务器一次一行的检索数据而不是检素所有行,并输出当前 cache 到内存中

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

-extended-insert:使用包括几个 values 列表的多行 insert 语法,这样文件更小,I0也小,导入数据时会非常快
--default-character-set=latin1:按照原有字符集导出数据,这样导出的文件中,所有中文都是可见的,不会保存成乱码 

打开 bookdata.sql 将 SET NAME latin1 修改成 SET NAME utf8

 

新建 book2 库

[root@weiyi ~]# mysql -e "create database book2 default charset utf8;" -uroot -p123456

导入我们之前导出的表结构

[root@weiyi ~]# mysql -uroot -p123456 book2 <booktable.sql

导入数据

[root@weiyi ~]# mysql -uroot -p123456 book2 <bookdata.sql

查看结果

[root@weiyi ~]# mysql -uroot -p123456 -e"show create table book2.books;"

[root@ weiyi~]# mysql-uroot -p123456 -e"select * from book2.books;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵唯一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值