mysql 手册关于修改列字符编码的一个bug
项目因为历史原因使用了 GBK编码,遇到非GBK编码字符时出现乱码问题,情况比较严重,暂时先打算修改 列的字符编码为 utf8mb4.
查看 mysql 手册:

用 GBK 编码转 utf8 进行说明:
他的大概意思是,如果 是 char varchar text 等类型的,并且这些列的内容也是采用的正确的编码(GBK),也就是列的内容的编码和列的定义中指定的编码一致时,可以直接使用类似下面的语句进行处理:
ALTER TABLE t MODIFY COLUMN col_name varchar(60) CHARACTER SET utf8mb4;
如果 列的内容和列定义中指定的编码不一致时,需要先 转成 binary, 在转出自己想要的字符集 utf8mb4.
但是实际测试发现,这里表达有误。如果按照他这个说明进行转的话,100%会乱码! 这里的: with the desird character set 应该改成:with the right charcter set, then to the desired character set.
如果列的内容和列定义中指定的编码不一致时,需要先转出 binary, 再转出 gbk(the right charcter set) , 然后再转成 自己想要的 utf8mb4( the desired character set)。这样才不会乱码。
总结一下:
1)如果你能确保你 gbk 编码的列中的内容也是gkb编码格式存储的那么,转utf8mb4时,很简单,直接转就可以了:
alter table t modify column col varchar(60) character set utf8mb4;
2) 如果你不能确定 你 gbk 编码的列中的内容也是 gbk 编码格式存储的时,你需要先转成 binary, 再 转出 gkb, 最后转出 utf8mb4:
alter table t modify column col binary;
alter table t modify column col varchar(60) character set gbk;
alter table t modify column col varchar(60) character set utf8mb4;
3) 不乱码还有一个前提,就是 子集转超集。比如 GBK 转 utf8. 也就是GBK 编码的字符,UTF8都可以编码。
如果是 utf8 转 GBK,那么那些 utf8可以编码的,GBK不能编码的字符就会乱码了,就会丢失内容。
mysql 手册关于修改列字符编码的一个bug的更多相关文章
- MySQL数据库、表的字符编码
用MySQL命令行新建数据库和表时默认的字符编码是latin1,但是在实际开发过程中一般都是使用utf8格式的编码.操作如下: 1.修改数据库字符编码 mysql> alter database ...
- google浏览器修改网页字符编码
google浏览器修改网页字符编码 直接在google浏览器的应用拓展程序里面搜 Charset,第一个就是 于是就有了
- MySQL的搜索引擎,统一字符编码 和忘记MySQL密码如何破解
忘记mysql密码 linux平台下,破解密码的两种方式 [root@egon ~]# rm -rf /var/lib/mysql/mysql #所有授权信息全部丢失!!! [root@egon ~] ...
- 修改CMD字符编码
1.参考网址: 1.1.http://blog.useasp.net/archive/2012/04/24/how_to_use_UTF8_encoding_in_Windows_CMD.aspx 1 ...
- python自学第6天,文件修改,字符编码
文件的修改: 一般是把旧文件的内容改了,在写入到新的文件中去. file_old=open("test","r",encoding="utf-8&qu ...
- Oracle修改默认字符编码
--查看Oracle数据库字符集: Sql代码 select userenv('language') from dual; 查询结果: SIMPLIFIED CHINESE_CHINA.AL32UTF ...
- MySQL修改数据库、表、列、外键字符编码和排序编码
在重启Confluence应用时,突然遇见这个检查错误,查询总结需要修改Mysql数据库的所有字符编码和排序编码,报错如下: Confluence Help – This installation o ...
- mysql命令行修改字符编码
1.修改数据库字符编码 mysql> alter database mydb character set utf8 ; 2.创建数据库时,指定数据库的字符编码 mysql> create ...
- mysql之修改字符编码
目录 统一修改字段编码 修改单个字段编码 修改表字符编码 统一修改字段编码: alter table `tablename` convert to character set utf8; 修改表字符编 ...
随机推荐
- spring_boot_pay支付宝,微信,银联支付详细代码案例
spring-boot-pay 支付服务:支付宝,微信,银联详细代码案例(除银联支付可以测试以外,支付宝和微信支付测试均需要企业认证,个人无法完成测试),项目启动前请仔细阅读 注意事项 . 友情提示 ...
- Spring基础篇——Spring容器和应用上下文理解
上文说到,有了Spring之后,通过依赖注入的方式,我们的业务代码不用自己管理关联对象的生命周期.业务代码只需要按照业务本身的流程,走啊走啊,走到哪里,需要另外的对象来协助了,就给Spring说,我想 ...
- Office 365也是.NET Core应用开发新战场
最近有幸阅读了陈希章花了一年时间为国内开发者贡献的<Office 365 开发入门指南>. 虽然早期接触过SharePoint的开发,2007年之后就再也没有接触SharePoint的开发 ...
- Fiddler工具的界面说明
1.Fiddler界面说明 2.session的模块说明 包含部分如下: 注:标蓝色区域的内容为平时较常用的部分 3.session不同图标和不同颜色的含义 默认颜色的含义如下: 部分图标的含义如下: ...
- angular4.0单个标签不能同时使用ngFor和ngIf
这个问题估计是ng4严格了语法规范的原因. 介于这篇太短,附上图助助兴致 解决办法: <div *ngFor="表达式"> <ng-container *ngIf ...
- K:Union-Find(并查集)算法
相关介绍: 并查集的相关算法,是我见过的,最为之有趣的算法之一.并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题.其相关的实现代码较为简短,实现思想也 ...
- eclipse常用快捷设置
1.代码自动提示 在我们忘记方法名或者想偷懒时,代码自动提示很管用.不过Eclipse默认是输入"."后才会出现包或类成员的提示,也就意味着我们必须先输入一个完整的类名,提示才能出 ...
- eclipse的各种错误和解决方法
1.cannot import xxx because the project name is in use
- easy ui Tree请求跨域数据
扯淡篇: jQuery EasyUI为提供了大多数UI控件的使用,如:accordion,combobox,menu,dialog,tabs,validatebox,datagrid,window,t ...
- Chris Richardson微服务翻译:构建微服务之微服务架构的进程通讯
Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯(本文) 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...