下面模拟把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字符集不支持的那部分汉字数据。

mysql已有数据字符集转换的更多相关文章

  1. mysql 已有数据字符集的修改

    mysql 字符集的修改 可以使用set names utf8 通过修改配置文件 可修改参数 default_character_set=utf8 但是以上修改方法只对数据库中新增的记录生效,如果数据 ...

  2. MySQL 已有大数据量表进行分区踩坑

    一.背景mysql 表中已有 4 亿数据,为提高查询效率,需创建分区,一开始计划是创建 HASH 分区,结果报错:ERROR 1659 (HY000): Field 'partno' is of a ...

  3. Django使用Mysql已存在数据表的方法

    在mysql数据库中已经存在有数据的表,自己又不想删除,下面方法可以同步django中创建的表 1.最好将自己建的表名改为前缀和django自动创建表名前缀相同,不改也可以,但是后期表太多容易混乱 2 ...

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

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

  5. Mysql修改已有数据的字符集

    Mysql修改已有数据的字符集 问题 在生产环境中跑了很久,发现MysqlClient连接的字符集是默认的latin1,我们一直以为都是utf8,造成这样的误解,是因为在内网环境中,我们是源码编译的M ...

  6. MySQL之对数据库库表的字符集的更改

    数据字符集修改步骤: 对于已有的数据库想修改字符集不能直接通过 "alter database character set *"或 "alter table tablen ...

  7. 已有数据表的Mysql字符编码修改

    Mysql字符集修改应该如何实现呢?下面就为您详细介绍已用数据表的Mysql字符集修改方法,希望对您学习Mysql字符集方面能有所启迪. 环境:在应用开始阶段没有正确的设置字符集,在运行一段时间以后才 ...

  8. 彻底理解mysql服务器的字符集转换问题

    主要参考这三个文章: https://www.xiariboke.com/article/4147.html http://blog.sina.com.cn/s/blog_690c46500100k1 ...

  9. MySQL主从复制——主库已有数据的解决方案

    在上篇文章中我们介绍了基于Docker的Mysql主从搭建,一主多从的搭建过程就是重复了一主一从的从库配置过程,需要注意的是,要保证主从库my.cnf中server-id的唯一性.搭建完成后,可以在主 ...

随机推荐

  1. MyBatis环境搭建配置文件+入门视频下载

    1.MyBatis优点 操作简单话,代码量少,效率高,成本就降低了 2.MyBatis缺点 参数只能限制为一个 selece语都要手动来写 3.与JDBC的关系:是对JDBC的扩展 把sql语句和ja ...

  2. 关于viewpoint的疑惑

    问题: 为什么在手机上打开一个PC web页面,用手机打开一个宽度为980的固定布局页面,页面会默认缩放到刚好满屏显示,并不会出现横向滚动条? 一:设备像素和CSS像素区别 现代浏览器中实现缩放的方式 ...

  3. 数据结构 C++ 单链表 一元多项式的相加

    #include <iostream> using namespace std; struct Node { double coe; //系数 int exp; //指数 Node *ne ...

  4. HTTP协议 (二) 基本认证

    HTTP协议 (二) 基本认证 http协议是无状态的, 浏览器和web服务器之间可以通过cookie来身份识别. 桌面应用程序(比如新浪桌面客户端, skydrive客户端)跟Web服务器之间是如何 ...

  5. “迷宫”sprint——6.8

    会议时间:2015.6.8 ,12:30——13:00 会议内容:开始第二阶段冲刺,分配任务. 我的任务:完成安卓环境搭建.

  6. Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset(可持久化Trie)

    D. Vasiliy's Multiset time limit per test 4 seconds memory limit per test 256 megabytes input standa ...

  7. 10与元素亲密接触:盒元素(the box model)

    line-height属性可以设置文本的行间距,可以用像素.em或百分比等于字体大小有关的值定义行间距line-height: 1.6em;(行间距为字体大小的1.6倍) CSS把每一个单一的元素看作 ...

  8. Linq 动态查询排序

    Linq的排序一般是这样写的: query.OrderBy(x => x.Tel).Skip().Take(); 实际使用中排序字段可能是通过字符类型的参数来设置的,于是想这样实现: query ...

  9. EntityFramework 实体拆分与表拆分

    摘录自https://msdn.microsoft.com/zh-cn/data/jj591617 * 将实体类型的 CLR 属性映射到数据库中的多个表(实体拆分) 实体拆分允许一个实体类型的属性分散 ...

  10. QTreeWidget

    #include "dialog.h" #include "ui_dialog.h" #include<QtCore> #include<Qt ...