mysql中文乱码相信是每一名java web码农抓耳挠腮又痛心疾首的问题,有病乱投医,一通搜索,照着网上方法一个又一个的做,“怎么还是特么不行?!!”。
实际上从表面现象看,网上的问题和你的问题都是中文出现了乱码,但病源出在哪,却各不相同。Ok,别慌张,沉下来心跟我一步步诊断病因,并彻底根除。
声明:本文旨在帮助大家找出乱码的原因和解决办法,具体操作自行百度google。
大原则:数据库、表和字段、页面三者的字符集要统一!
首先,(打断点或者打印一下)查看从dao层取出的数据是否已经乱码
若已出现乱码,那问题出现在数据库编码、数据库连接或表和字段的字符集上。
检查数据库编码
mysql默认编码为latin1,不支持中文。所以需要将数据库编码手动修改为gb2312,gbk或utf-8。个人建议使用utf-8,原因是支持繁体中文和一些特殊符号。
命令:
查看数据库编码:
show variables like 'character%';
变量说明:
character_set_client为客户端编码方式;
character_set_connection为建立连接使用的编码;
character_set_database数据库的编码;
character_set_results结果集的编码;
character_set_server数据库服务器的编码;
搜索tip:查看修改mysql编码方式
如果需要建新数据库,一定要注意指定编码。
命令:
CREATE DATABASE test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
但有人说重启服务器服务后会失效,所以要通过my.ini配置来永久设置。不过本人还没验证过,欢迎指教。
检查数据库连接设置
这里手动查看吧,设置方式取决于你的数据库连接配置获取方式。
如果是写在基于xml的配置文件里(如使用Tomcat连接池的context.xml,Hibernate的hibernate.cfg.xml,或iBATIS的sqlMapConfig.xml):
基本xml的连接配置.png
注意二者不同:代码里参数的连接用&,而xml里参数的连接用& amp;(5个字符,(&、a、m、p、;)中间没有空格。
检查表和字段的字符集
表一般不需要格外关注。
字段的话,如果是char或varchar指定字符为utf8。
搜索tip:mysql查看修改字段字符集
若没出现乱码,那问题便出在前端页面。
若问题出现在前端页面,那情况可能会很复杂,但幸好最常见的情况就这几种:
若为静态页面
在
中加入以下meta,指定字符格式就好了。若为动态页面
在jsp最顶端设置字符格式
究极万能百分之一百万有效
浏览器的编码格式设为utf-8,啊,有没有觉得自己傻*了?
搜索tip:jsp页面中文乱码
结束语
你的病,好了吗?
我是惊蛰,立志从搬砖的码农成长为优秀的程序员.
QQ:623001594