有时候会在不注意的情况下创建了字符集为latin1的数据库,导致后续插入的中文显示乱码。这时有两种方法:1.修改数据库与数据表的字符集(只能向上调整,不能向下调整);2.数据迁移。但是两种方法都需要做好备份,谨慎操作。

  创建测试环境:

[root@youxi1 ~]# vim user_tb.sql  //创建一个sql脚本
drop database if exists test_mv;
create database test_mv character set latin1;  //因为我默认的是UTF-8字符所以这里指定字符集
use test_mv; create table user_tb(
id int,
name varchar(20)
)CHARSET=latin1;  //指定字符集的原因和上面一样
/*!40101 SET character_set_client = latin1 */;  //由于我是UTF-8所以需要,否则无法导入汉字。 lock tables user_tb write;
insert into user_tb values (1,'学生'),(2,'老师');
unlock tables;
[root@youxi1 ~]# mysql -u root -p123456 < user_tb.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@youxi1 ~]# mysql -u root -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.16 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> use test_mv;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> select * from user_tb;  //汉字显示乱码
+------+---------------+
| id | name |
+------+---------------+
| 1 | 学生 |
| 2 | 老师 |
+------+---------------+
2 rows in set (0.00 sec)

(2).修改字符

  请查看:各种修改Mysql字符集

  注意:选择目标字符集时,要注意最好大于等于原字符集(字库更大),否则可能会丢失不被支持的数据。

(3).数据迁移

1)导出test_mv数据库

[root@youxi1 ~]# mysqldump -uroot -p123456 --quick --extended-insert --default-character-set=latin1 -B test_mv > test_mv_latin1.sql

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

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

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

  注意:我这里使用了-B选项将整个数据库都导出了。如果使用的是-d选项表示导出表结构,而默认选项是导出整张表,默认选项和--no-create-info一起使用则表示只导出表数据。

(2).编辑test_mv_latin1.sql将latin1修改为utf8

  首先做备份,做好备份后再进行如下操作:

[root@youxi1 ~]# vim test_mv_latin1.sql 

:%s/latin1/utf8/g  //替换文件中的所有latin1为utf8,之后保存退出

(3).删除原来的数据库,导入修改后的sql文件

[root@youxi1 ~]# mysql -u root -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.7.16 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> drop database test_mv;
Query OK, 1 row affected (0.02 sec) mysql> source /root/test_mv_latin1.sql

(4).查看结果

mysql> use test_mv
Database changed
mysql> select * from user_tb;
+------+--------+
| id | name |
+------+--------+
| 1 | 学生 |
| 2 | 老师 |
+------+--------+
2 rows in set (0.00 sec)

  

Mysql迁移由于字符集导致乱码的数据的更多相关文章

  1. Mysql基础之字符集与乱码

    原文:Mysql基础之字符集与乱码 Mysql的字符集设置非常灵活 可以设置服务器默认字符集 数据库默认字符集 表默认字符集 列字符集 如果某一个级别没有指定字符集,则继承上一级. 以表声明utf8为 ...

  2. 字符集导致乱码问题,gi安装问题

    今天是2014-4-24,今天中午收到一个天津网友问的一个安装gi的问题,和一个网友问的字符集问题:在此整理一下 问题一: gi安装问题: 问题描写叙述: 在安装gi的时候提示:"INS-2 ...

  3. 解决MySQL版本之间造成的乱码、数据查询不出的问题

    在数据库连接字符串上加  charset=utf8 <connectionStrings> <add name="XJRDSModels" connectionS ...

  4. MySQL从删库到跑路(二)——MySQL字符集与乱码解析

    作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.字符集与编码 1.字符集简介 字符(Character)是各种文字和符号的总称,包括各国家文字.标点符号.图形符 ...

  5. mysql更改已有数据表的字符集,保留原有数据内容

    mysql更改已有数据表的字符集,保留原有数据内容     原文网址:http://blog.csdn.net/learn_2/article/details/6460370 环境:在应用开始阶段没有 ...

  6. mysql 字符集更改与导入数据

    mysql 字符集更改与导入数据 mysqldb经常有中文乱码的问题,解决起来很恼火.其实所有开发和数据库统一为一种编码就可以了: utf8. 1 下面修改mysql的编码 1) 永久修改. 在/et ...

  7. 将数据从MySQL迁移到Oracle的注意事项

    将数据从MySQL迁移到Oracle的注意事项1.自动增长的数据类型处理MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值.ORACLE没有自动增长的数据类型,需要建立一个自动 ...

  8. 为 MySQL 设置默认字符集(UTF-8)避免产生乱码

    环境:Windows 7+Wamp Server+MySQL 5.7.9 查看MySQL默认编码: SHOW VARIABLES LIKE 'character%' character_set_cli ...

  9. 如何彻底解决MySQL更改默认字符集以及字符乱码问题!!!

    在我们使用MySQL数据库时,字符乱码,对我们来说是一个很头疼的问题.今天笔者就来教大家如何彻底解决更改默认字符集以及字符乱码问题. 当我们使用压缩包进行MySQL安装后,系统会使用默认的字符集,这时 ...

随机推荐

  1. 线性查找与二分查找(python)

    # -*- coding: utf-8 -*- number_list = [0, 1, 2, 3, 4, 5, 6, 7] def linear_search(value, iterable): f ...

  2. python模拟双色球大乐透生成算法

    每天练习一段python代码,健康生活一辈子.晚上下班没事,打开电脑继续编写python代码!今天分享的一个是大家熟悉的双色球彩票的游戏,根据这个进行写的一个python算法,代码精简,肯定有bug, ...

  3. List集合和Set集合UML图总结

    1.List和Set,用RationalRose展示 2.Map

  4. 执行Commit时Oracle做哪些工作

    COMMIT是一个非常快的操作,当我们发布commit命令时,真正困难的动作已经完成,在数据库中已经执行了数据更改,所以已经完成了99%的任务,例如:下列操作已经产生: 1.在SGA(Buffer C ...

  5. 1~n中数字0~9出现的次数

    题意:rt 分析: 当然不可能去遍历,应该寻找统计的方法. 如计算 78501 中 "5" 出现的次数. 我们可以枚举“5”出现的位置, 如当“5”位于倒数第2位时,写成 xxx5 ...

  6. 2019牛客多校A All-one Matrices——单调栈

    题目 求非嵌套子矩阵的个数. 分析 单调栈的套路题(类似的有求最大子矩阵). 首先,按列预处理,每个位置化成连续1的个数. 例如,左边的图转成右边.                      然后枚举 ...

  7. 02-Elenment 引入使用

    快速上手 本节将介绍如何在项目中使用 Element. ¶使用 vue-cli@3 我们为新版的 vue-cli 准备了相应的 Element 插件,你可以用它们快速地搭建一个基于 Element 的 ...

  8. 微信小程序 post 请求获取不到参数原因

    如果使用post 请求一定要加上 header: { "content-type": "application/x-www-form-urlencoded" } ...

  9. javascript权威指南第14章 表单脚本示例代码

    HTML部分 <!DOCTYPE html> <html> <head> <title></title> </head> < ...

  10. Peaks 线段树合并

    Peaks 线段树合并 \(n\)个带权值\(h_i\)山峰,有\(m\)条山峰间双向道路,\(q\)组询问,问从\(v_i\)开始只经过\(h_i\le x\)的路径所能到达的山峰中第\(k\)高的 ...