MySQL修改字符集步骤(字段插入中文提示错误时解决办法)
在实际应用中,如果一开始没有正确的设置字符集,在运行一段时间以后,才发现当前字符集不能满足要求,需要进行调整,但又不想丢弃这段时间的数据,这个时候就需要修改字符集。
在《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修改字符集步骤(字段插入中文提示错误时解决办法)相关推荐
- 计算机无法连接网络显示错误651,电脑连接路由器提示错误651解决办法
有的用户在设置路由器后或者突然上不去网时候出现错误代码651,这可严重影响了我们上网,简直什么都做不了.不过不用着急,下面小编带来解决办法,请大家参考! 问题描述:路由器连接后提示错误代码651 宽带 ...
- mysql 1067 datadir_MySQL修改datadir后启动服务发生1067错误的解决办法
当前windows下最新版的mysql (5.6.22.0)在安装时没有指定安装路径和数据存放路径的选项,而是默认把程序安装在C盘Program Files下,数据也存放在C:/ProgramData ...
- PS提示错误1解决办法
重装电脑系统后,PS打不开了,提示错误1.在网上搜索,很多网友说要卸载重装.控制面板看不到ps,于是下载了Adobe卸载工具(点击链接下载),但是这个程序识别不了安装的ps.最后通过以下办法解决. 1 ...
- SQL Server插入中文出现乱码??的解决办法
一: 出现的情形 当写入英文版本的SQL Server 时候可能出现这个问题, 比如您的数据库创建在自己的中文SQL Server,而另一个数据库放在国外虚拟主机上(PS:国外的SQL Server当 ...
- linux系统中mysql表中能添加中文_数据库学习之数据库增删改查(另外解决Mysql在linux下不能插入中文的问题)(二)...
数据库增删改查 增加 首先我们创建一个数据库user,然后创建一张表employee create table employee( id int primary key auto_increment, ...
- mysql修改字符集utf8mb4引发的惨案
mysql修改字符集utf8mb4引发的惨案 环境配置: Linux CentOS 7 mysql5.7字符编码是utf8: 惨案原因:数据库表需要支持表情很符号,表情符号一般是4个字符,utf8最多 ...
- mysql修改字符集utf8为utf8mb4
mysql修改字符集utf8为utf8mb4 查看数据库的编码格式 1 2 3 SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR ...
- MySQL修改表的字段
MySQL修改表的字段 1.ALTER TABLE 方法 2.MODIFY COLUMN 方法 MySQL 修改表字段的方法有两种: ALTER TABLE MODIFY COLUMN. 1.ALTE ...
- MySQL 修改表 添加字段
MySQL 修改表 添加字段 ALTER TABLE 表名 ADD COLUMN 添加的字段 VARCHAR(10) NOT NULL COMMENT '备注' AFTER 某个字段;
最新文章
- kafka教程视频百度网盘下载,聊一聊-MySQL-数据库中的那些锁
- python能在工程上干嘛-python能干什么?
- linux wireshark_WireShark使用教程
- matlab图像的腐蚀和膨胀_OpenCV图像处理系列八 --- 腐蚀与膨胀
- 每天一道LeetCode-----给定字符串s和字符数组words,在s中找到words出现的位置,words内部字符串顺序无要求
- linux在指定目录多个文件中搜索关键字
- python多项式回归_在python中实现多项式回归
- Qt文档阅读笔记-数据驱动测试
- 四舍五入算法 php,3种PHP实现四舍五入的方法
- Vue.js 源码分析(九) 基础篇 生命周期详解
- 从0开始学习自动化测试框架cypress(五)案例
- php Access-Control-Allow-Origin 解决跨域问题
- 面对SDN,我们该怎么办?
- 实现网页页面跳转的几种方法(meta标签、js实现、php实现)
- markdown 常用语法格式
- 深入百度蜘蛛IP段详解
- 《IBM SPSS Modeler数据与文本挖掘实战》之社交网络分析
- 在Windows上将桌面图标做成贪吃蛇游戏
- 算法设计之动态规划法
- Oauth2 数据库表说明
热门文章
- matlab中欠定方程组超定方程组_七年级下册第10章:认识二元一次方程组(1课时)...
- java jdbc连接derby,通过JDBC连接到Derby数据库失败
- java 线程同步condtion_Java:多线程,使用同步锁(Lock)时利用Condition类实现线程间通信...
- 计算机导论sql试题,sql语句查询 练习题
- python 支持向量机预测结果相同_Python机器学习算法 — 支持向量机(SVM)
- postman 字符数组_PostMan Post方式传递数组数据参数 OK_go-Go语言中文社区
- 【绝密】泰坦导弹制导计算机内部!
- 如何将sql数据导入到oracle数据库,将SQLServer的数据导入到Oracle数据库的方法-Oracle...
- matlab双纵坐标的绘图命令_MATLAB基础学习之绘图基本命令
- 计算机硬盘工作时应该避免什么,什么是电脑硬盘?有何作用?如何保养它?