1.2016年11月15日(周二),我被经理外派出差渝北金开大道,任务:解决那边的一个数据库乱码异常

2.那边的负责人描述:数据库原是utf8编码,他为了兼容emoji表情,改为utf8mb4,之后出现编码异常

3.数据库是mysql

4.程序人生第一次review别人的代码

第一步:UTF8与UTF8MB4编码的关系

在mysql中,utf8mb4是utf8的子集,之间是可以切换的

第二步:检查异常字符

出现编码异常的只有中文

如果是emoji表情编码乱码还可以解释,为啥是中文乱码

中文在utf8mb4和utf8中同为三个字节

第三步:异常排查

1.备份数据,转存到备用测试服务器

2.在测试服存储中文字符,一切正常

3.检查正式服务器和测试服务器的Nginx、Tomcat配置,数据库链接url,一模一样

4.我要求他打印出sql执行情况,console只打印sql的配置:http://www.zuidaima.com/blog/2998561964854272.htm,catalina.log中显示insert时中文已经乱码了

PS:需要检查sql执行情况时,写个log4j.properties传到服务器上,重启一下就可以看到了,不需要了删除即可

5.我冤枉了数据库

难道是打包的问题?

1.检查eclipse的编码,还是utf8,检测分割符,是unix的分隔符,完全符合linux的环境

2.重新打个包传到测试服务器,经测试乱码

3.好吧,数据库接到测试服务器,本地开启调试,中文乱码

代码有问题!

我问了一句那边的负责人:你发布最后一个版本时写了代码没

他说写了的,然后把代码翻给我看

web.xml的过滤器中约定了全文编码为utf8

在java代码中又处理一次编码

然而就是这个多余的编码

source.getBytes(),"UTF-8"

解释这句代码:getBytes不传编码,默认会按照ISO-8859-1来解析,再转回UTF8

ISO-8859-1是java默认的编码方式

把他的代码注释传到测试服,测试,正常了。

总结:

mysql如果是utf8和utf8mb4切换引发编码异常的,都好好检查自己的代码,这个锅,mysql和eclipse都不背。

java专业编码_java编码中的坑(记一次解决编码BUG的经历) - 贪吃蛇学院-专业IT技术平台...相关推荐

  1. JAVA飞信_java调用飞信接口发短信 - 贪吃蛇学院-专业IT技术平台

    java调用飞信接口发短信,看到挺好的,有利于大家做毕业设计加亮点,就发给大家了(新人发帖,不会发多个文件名,测试类就放这了) 需要这3个jar包: commons-codec-1.4.jar com ...

  2. java贪吃蛇客户端服务器_java Socket套接字TCP编程开发服务端和客户端之间的通信 - 贪吃蛇学院-专业IT技术平台...

    超级简单,没有太多实质内容的Socket服务端,客户端小程序 先运行server 再运行client OK 服务端代码如下: public class Server { public static v ...

  3. java贪吃蛇代码idea_IntelliJ idea使用笔记 - 贪吃蛇学院-专业IT技术平台

    从eclipse切换到Idea有一周时间了,真真实实感受到了idea的强大,我曾经想从eclipse切换到idea,因为使用习惯的问题放弃了,这次狠下心使用了一周,慢慢熟悉了这个强大的开发工具.在此记 ...

  4. easyui java代码生成器,easyui+jdbc+xml模板开发自动化生成报表的java工具 - 贪吃蛇学院-专业IT技术平台...

    ps:看到有同学问了一下问题,做一下答复,该实现不是web项目,大家只需要将代码集成到web项目中即可,原项目太大,不便上传.还有 jar包自己找啊 呵呵 采用easyui+jdbc+xml模板生成报 ...

  5. java cxf 搭soa,WebService CXF入门问题 SOA 骑着上帝去环游 - 贪吃蛇学院-专业IT技术平台...

    package deng; import javax.xml.ws.Endpoint; import com.founder.ws.HelloWorld; import com.founder.ws. ...

  6. sscom 中文显示 乱码_SSM框架:解决后台传数据到前台中文乱码问题,使用@ResponseBody返回json 中文乱码 Web程序 - 贪吃蛇学院-专业IT技术平台...

    场景: 在实际运用场景中,当前台发起请求后,我们需要从后台返回数据给前台,这时,如果返回的数据中包含中文,则经常会出现在后台查询出来都是好好,但是传输回去就莫名的乱码了,而且,我们明明已经在 web. ...

  7. 东方通如何查看版本linux命令,东方通tongweb linux安装 Web程序 - 贪吃蛇学院-专业IT技术平台...

    1.把安装的bin文件和license.dat文件放到/opt目录下 2.运行$sh Install_TW5.0.0.0_Standard_Linux.bin -i console 命令在 Linux ...

  8. 贪吃蛇程序 php,php,函数 Web程序 - 贪吃蛇学院-专业IT技术平台

    1.函数定义: 函数就是将一些重复使用到的功能写在一个独立的代码块中,在需要时单独调用.创建函数的基本语法格式为: function fun_name($str1,$str2,,,,$strn){ f ...

  9. php点击字切换验证码,PHP生成图片验证码、点击切换实例 Web程序 - 贪吃蛇学院-专业IT技术平台...

    http://www.jb51.net/article/51506.htm 现在让我们来看下 PHP 代码 复制代码代码如下: session_start(); function random($le ...

最新文章

  1. docker 搭建私有仓库
  2. java根据模板生成PDF
  3. clipse中Access restriction: The type ‘XXX’ is not API 解决
  4. Android 驱动开发(14)---深入学习Linux Device Tree
  5. html页面跳转方式 + 跳转传参
  6. 显示器显示颜色差,导致BUG一例
  7. 深入浅出Python——Python高级语法之面向对象
  8. 2020 IJCAI 接受论文 list 分类排列(一)
  9. 如何将pdf文件转换成图片格式,插入到word中
  10. python3读取键盘输入_Python读取键盘输入
  11. 微信小程序开发实战(12):滑杆组件(slider)和form组件
  12. Ubuntu 18.04 WPS导出pdf部分线条变粗(okular的小问题)
  13. 分布式协调器ZooKeeper3.4—管理员手册
  14. C语言int类型和float浮点型数据在内存中的存储方式
  15. Open vSwitch概述
  16. Kafka生产者与消费者详解
  17. 百度中的高级搜索功能
  18. 转载一篇文章,纪念我的童年~ 炮竹
  19. IDEA运行Run和services
  20. linux 看硬盘运行时间长,Linux服务器查看硬盘通电时长命令 确保服务器硬件配置...

热门文章

  1. RT-Thread优化智能车设计
  2. 2021年春季学期-信号与系统-第十次作业参考答案-第一小题
  3. 粘贴铜箔简易实验电路制作
  4. html中空标签的有什么,HTML常用标签,什么是空标签和可替换标签
  5. python logging.getlogger_logging.getLogger与logger的父子关系
  6. android本地xml文件怎么打开,android 打开本地文件
  7. linux open()调用的注意事项
  8. 切换不了摄像头 高拍仪_手机摄像头模组支架保护膜的变革之路
  9. 鸿蒙智慧屏安卓内核,一切都是假象?荣耀智慧屏翻车,鸿蒙只是安卓的皮肤?...
  10. 流 java_java8——使用流