mysql已有数据字符集转换
下面模拟把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已有数据字符集转换的更多相关文章
- mysql 已有数据字符集的修改
mysql 字符集的修改 可以使用set names utf8 通过修改配置文件 可修改参数 default_character_set=utf8 但是以上修改方法只对数据库中新增的记录生效,如果数据 ...
- MySQL 已有大数据量表进行分区踩坑
一.背景mysql 表中已有 4 亿数据,为提高查询效率,需创建分区,一开始计划是创建 HASH 分区,结果报错:ERROR 1659 (HY000): Field 'partno' is of a ...
- Django使用Mysql已存在数据表的方法
在mysql数据库中已经存在有数据的表,自己又不想删除,下面方法可以同步django中创建的表 1.最好将自己建的表名改为前缀和django自动创建表名前缀相同,不改也可以,但是后期表太多容易混乱 2 ...
- mysql更改已有数据表的字符集,保留原有数据内容
mysql更改已有数据表的字符集,保留原有数据内容 原文网址:http://blog.csdn.net/learn_2/article/details/6460370 环境:在应用开始阶段没有 ...
- Mysql修改已有数据的字符集
Mysql修改已有数据的字符集 问题 在生产环境中跑了很久,发现MysqlClient连接的字符集是默认的latin1,我们一直以为都是utf8,造成这样的误解,是因为在内网环境中,我们是源码编译的M ...
- MySQL之对数据库库表的字符集的更改
数据字符集修改步骤: 对于已有的数据库想修改字符集不能直接通过 "alter database character set *"或 "alter table tablen ...
- 已有数据表的Mysql字符编码修改
Mysql字符集修改应该如何实现呢?下面就为您详细介绍已用数据表的Mysql字符集修改方法,希望对您学习Mysql字符集方面能有所启迪. 环境:在应用开始阶段没有正确的设置字符集,在运行一段时间以后才 ...
- 彻底理解mysql服务器的字符集转换问题
主要参考这三个文章: https://www.xiariboke.com/article/4147.html http://blog.sina.com.cn/s/blog_690c46500100k1 ...
- MySQL主从复制——主库已有数据的解决方案
在上篇文章中我们介绍了基于Docker的Mysql主从搭建,一主多从的搭建过程就是重复了一主一从的从库配置过程,需要注意的是,要保证主从库my.cnf中server-id的唯一性.搭建完成后,可以在主 ...
随机推荐
- MVC VS2012 Code First 数据库迁移教程
1.在“服务资源管理器”连接数据库 2.打开工具-Nuget程序包管理器“程序包管理器控制台” 3.控制台输入命令:PM> Enable-Migrations -StartUpProjectNa ...
- zabbix_agent 步骤
Zabbix server 做好了,只要在安装一个zabbix-agent(监控端就可以啦) groupadd zabbix useradd -g zabbix zabbix 下载一个客户端的安装包: ...
- java 与c#比较
1.开发周期方面:c#比java开发周期更快2.java出现的时间更长.开源性广.跨平台性好3.c#较为封闭.后出于java4.c#有无符号类型.java没有5.java与c#都有值类型.但是java ...
- isset 和empty 两个函数的用法
关于用php 获取当前脚本的url很多朋友会说很简单,但是要获取很详细的就要经过多次判断哦. $PHP_TIME = time();$PHP_SELF = isset($_SERVER['PHP_SE ...
- JavaScript入门篇 第一天
使用<script>标签在HTML网页中插入JavaScript代码.注意, <script>标签要成对出现,并把JavaScript代码写在<script>< ...
- jsp\struts1.2\struts2 中文件上传(转)
jsp\struts1.2\struts2 中文件上传 a.在jsp中简单利用Commons-fileupload组件实现 b.在struts1.2中实现c.在sturts2中实现现在把Code与大家 ...
- Yii源码阅读笔记(二十六)
Application 类中设置路径的方法和调用ServiceLocator(服务定位器)加载运行时的组件的方法注释: /** * Handles the specified request. * 处 ...
- jwt refresh token
$app->post('auth/refresh-token', ['middleware' => 'jwt.refresh', function() { try { $old_token ...
- IIS应用程序池最大进程数设置
1.当工作进程数>1时,如果有多个连接请求就会启动多个工作进程实例来处理,所启动的最多工作进程数就是你设置的最大进程数,后续更多的连接请求会循环的发送至不同的工作进程来处理.每个工作进程都能承担 ...
- MySQL查询优化:查询慢原因和解决技巧
在开发的朋友特别是和mysql有接触的朋友会碰到有时mysql查询很慢,当然我指的是大数据量百万千万级了,不是几十条了,下面我们来看看解决查询慢的办法. MySQL查询优化:查询慢原因和解决方法 会经 ...