在实际应用中,如果一开始没有正确的设置字符集,在运行一段时间以后,才发现当前字符集不能满足要求,需要进行调整,但又不想丢弃这段时间的数据,这个时候就需要修改字符集。

在《MySQL设置默认字符集和校对规则》一节我们讲到,ALTER DATABASE 或 ALTER TABLE 命令对已经存在的数据没有作用,只对新创建的表或记录生效。如果想修改已存在数据的字符集,需要先将数据导出,经过适当的调整后,再重新导入。

例 1

以下模拟的是将 gb2312 字符集的数据库修改成 gbk 字符集的数据库的过程。

1)创建 testset 数据库,设置其字符集为 gb2312,并添加数据。

mysql> CREATE TABLE test.testset(-> id INT(11) DEFAULT NULL,-> name VARCHAR(25) DEFAULT NULL-> )CHARSET=gb2312;
Query OK, 0 rows affected (0.10 sec)mysql> INSERT INTO test.testset VALUES (1,'C语言');
Query OK, 1 row affected (0.01 sec)mysql> INSERT INTO test.testset VALUES (2,'Java语言');
Query OK, 1 row affected (0.01 sec)mysql> INSERT INTO test.testset VALUES (3,'Python语言');
Query OK, 1 row affected (0.01 sec)

2)导出 testset 表结构,命令如下:

mysqldump -uroot -p --default-character-set=gbk -d test testset> D:\testset.sql

其中,--default-character-set=gbk 表示以什么字符集连接;-d 表示只导出表结构,不导出数据。

3)打开 testset.sql 文件,修改表结构定义中的字符集为新的字符集,如下图所示。

4)确保表中的记录不再更新,导出所有记录。

mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=gb2312 test testset> D:\testdata.sql

  • --quick:该选项用于存储记录多的表。它强制 mysqldump 从服务器一次一行地查询表中的行,而不是查询所有行,并在输出前将它缓存到内存中。
  • --extended-insert:使用 INSERT 插入多行数据语法。可以使文件更小,导入文件时加速插入。
  • --no-create-info:不导出表的 CREATE TABLE 语句。
  • --default-character-set=gb2312:按照原有的字符集导出所有数据。这样导出的文件中,所有中文都是可见的,不会保存成乱码。

5)打开 testdata.sql,将 SET NAMES gb2312 修改成 SET NAMES gbk,如下图所示。

6)使用新的字符集创建新的数据库。

CREATE DATABASE test2 DEFAULT CHARSET gbk;

7)创建表,执行 testset.sql。

mysql -uroot -p test2 < D:\testset.sql

8)导入数据,执行 testdata.sql。

mysql -uroot -p test2 < D:\testdata.sql

9)查看 testset 表结构是否修改了字符集,以及表内数据是否丢失或乱码,SQL 语句和运行结果如下:

mysql> SHOW CREATE TABLE test2.testset \G
*************************** 1. row ***************************Table: testset
Create Table: CREATE TABLE `testset` (`id` int(11) DEFAULT NULL,`name` varchar(25) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
1 row in set (0.00 sec)mysql> SELECT * FROM test2.testset;
+------+------------+
| id   | name       |
+------+------------+
|    1 | C语言      |
|    2 | Java语言   |
|    3 | Python语言 |
+------+------------+
3 rows in set (0.00 sec)

注意:选择目标字符集的时候,要注意最好的是原字符集的超集,或者确定比原字符集的字库更大,否则如果目标字符集的字库小于原字符集的字库,那么目标字符集中不支持的字符导入后会变成乱码,丢失一部分数据。

MySQL修改字符集步骤(字段插入中文提示错误时解决办法)相关推荐

  1. 计算机无法连接网络显示错误651,电脑连接路由器提示错误651解决办法

    有的用户在设置路由器后或者突然上不去网时候出现错误代码651,这可严重影响了我们上网,简直什么都做不了.不过不用着急,下面小编带来解决办法,请大家参考! 问题描述:路由器连接后提示错误代码651 宽带 ...

  2. mysql 1067 datadir_MySQL修改datadir后启动服务发生1067错误的解决办法

    当前windows下最新版的mysql (5.6.22.0)在安装时没有指定安装路径和数据存放路径的选项,而是默认把程序安装在C盘Program Files下,数据也存放在C:/ProgramData ...

  3. PS提示错误1解决办法

    重装电脑系统后,PS打不开了,提示错误1.在网上搜索,很多网友说要卸载重装.控制面板看不到ps,于是下载了Adobe卸载工具(点击链接下载),但是这个程序识别不了安装的ps.最后通过以下办法解决. 1 ...

  4. SQL Server插入中文出现乱码??的解决办法

    一: 出现的情形 当写入英文版本的SQL Server 时候可能出现这个问题, 比如您的数据库创建在自己的中文SQL Server,而另一个数据库放在国外虚拟主机上(PS:国外的SQL Server当 ...

  5. linux系统中mysql表中能添加中文_数据库学习之数据库增删改查(另外解决Mysql在linux下不能插入中文的问题)(二)...

    数据库增删改查 增加 首先我们创建一个数据库user,然后创建一张表employee create table employee( id int primary key auto_increment, ...

  6. mysql修改字符集utf8mb4引发的惨案

    mysql修改字符集utf8mb4引发的惨案 环境配置: Linux CentOS 7 mysql5.7字符编码是utf8: 惨案原因:数据库表需要支持表情很符号,表情符号一般是4个字符,utf8最多 ...

  7. mysql修改字符集utf8为utf8mb4

    mysql修改字符集utf8为utf8mb4 查看数据库的编码格式 1 2 3 SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR ...

  8. MySQL修改表的字段

    MySQL修改表的字段 1.ALTER TABLE 方法 2.MODIFY COLUMN 方法 MySQL 修改表字段的方法有两种: ALTER TABLE MODIFY COLUMN. 1.ALTE ...

  9. MySQL 修改表 添加字段

    MySQL 修改表 添加字段 ALTER TABLE 表名 ADD COLUMN 添加的字段 VARCHAR(10) NOT NULL COMMENT '备注' AFTER 某个字段;

最新文章

  1. kafka教程视频百度网盘下载,聊一聊-MySQL-数据库中的那些锁
  2. python能在工程上干嘛-python能干什么?
  3. linux wireshark_WireShark使用教程
  4. matlab图像的腐蚀和膨胀_OpenCV图像处理系列八 --- 腐蚀与膨胀
  5. 每天一道LeetCode-----给定字符串s和字符数组words,在s中找到words出现的位置,words内部字符串顺序无要求
  6. linux在指定目录多个文件中搜索关键字
  7. python多项式回归_在python中实现多项式回归
  8. Qt文档阅读笔记-数据驱动测试
  9. 四舍五入算法 php,3种PHP实现四舍五入的方法
  10. Vue.js 源码分析(九) 基础篇 生命周期详解
  11. 从0开始学习自动化测试框架cypress(五)案例
  12. php Access-Control-Allow-Origin 解决跨域问题
  13. 面对SDN,我们该怎么办?
  14. 实现网页页面跳转的几种方法(meta标签、js实现、php实现)
  15. markdown 常用语法格式
  16. 深入百度蜘蛛IP段详解
  17. 《IBM SPSS Modeler数据与文本挖掘实战》之社交网络分析
  18. 在Windows上将桌面图标做成贪吃蛇游戏
  19. 算法设计之动态规划法
  20. Oauth2 数据库表说明

热门文章

  1. matlab中欠定方程组超定方程组_七年级下册第10章:认识二元一次方程组(1课时)...
  2. java jdbc连接derby,通过JDBC连接到Derby数据库失败
  3. java 线程同步condtion_Java:多线程,使用同步锁(Lock)时利用Condition类实现线程间通信...
  4. 计算机导论sql试题,sql语句查询 练习题
  5. python 支持向量机预测结果相同_Python机器学习算法 — 支持向量机(SVM)
  6. postman 字符数组_PostMan Post方式传递数组数据参数 OK_go-Go语言中文社区
  7. 【绝密】泰坦导弹制导计算机内部!
  8. 如何将sql数据导入到oracle数据库,将SQLServer的数据导入到Oracle数据库的方法-Oracle...
  9. matlab双纵坐标的绘图命令_MATLAB基础学习之绘图基本命令
  10. 计算机硬盘工作时应该避免什么,什么是电脑硬盘?有何作用?如何保养它?