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