环境:
mysql4.1.13
mysql-connector-java-3.1.10
tomcat5.5.9
eclipse SDK
jdk 1.5问题:
    JSP页面上显示utf8编码的中文没问题,把数据插入数据库中也没有问题,在数据库中提取出来在JSP页面中显示也没有问题,但是在mysql控制台或者其他查询工具中显示则为乱码。配置:
*Mysql的各个参数:
    default-character-set = utf8
    character_set_server  = utf8
    character_set_system  = utf8
    character_set_database  = utf8
    character_set_client  = utf8
    character_set_connection  = utf8
    character_set_results = utf8 
    collation_connection = utf8_general_ci
    collation_database = utf8_general_ci
    collation_server = utf8_general_ci*所有的Mysql数据库表都是以utf8编码创建,所有的JSP页面、Javabean文件都是使用utf8编码。*在JSP页面中已经加上
<%@page pageEncoding="utf-8"%>
<%@page contentType="text/html; charset=utf-8"%>
<%request.setCharacterEncoding("utf-8");%>*尝试过写成jdbc:mysql://192.168.1.87/mytest?useUnicode=true&characterEncoding=utf8,无效。*尝试过在查询前加入SET NAMES 'utf8';无效。*尝试过在启动console的时候设置default-character-set = utf8,也试过GBK,有微小改善:原来的?号变成中文乱码。使用SQLyog等工具取出来则是中文乱码。*尝试过导出数据库中的数据,发现导出后在notepad和Editplus等工具上都显示正常,编码为utf8*尝试过在取出数据库中的信息后,用new String(rs.getString(1).getBytes("UTF8"), "GBK")的方式来转换编码,然后在JSP页面上显示为乱码,而且乱码方式跟SQLyog和console中的一样,乱码的长度比原来的长1/3,因此我怀疑用工具查询mysql时显示的编码是GBK,因为它比utf8少一个字节。最后:
   我估计是mysql查询工具以及mysql控制台不支持utf8的问题,因此读取数据正常,而在查询工具中则显示为GBK乱码。各位大大可不可以给小弟一个解决方法呢?应该使用什么工具查询数据库才会支持utf8的显示呢?

解决方案 »

  1.   

    mysql是支持UTF-8的,JAVA也支持UTF-8,但是MYSQL和JAVA必须都使用UTF-8格式才行
    jsp中要有<%@page pageEncoding="utf-8"%>,jps文件也要保存成UTF-8格式
    如果以上条件全都满足还是乱码,一定是使用的jsp server的问题,
    tomcat对UTF-8支持的不好,最好使用resin,
    如果使用resin还不行,有个小窍门,在你的输入的jsp页面增加<%//%>一句话就成了
      

  2.   

    楼上的 <%//%> 是啥意思?
      

  3.   

    resin有个情况,UTF-8的jsp页面中不包含java元素,就不能正常显示,产生乱码,
    增加<%//%>这个空注释就没问题了,
    没有java元素的jsp页面,不生成.java和.class文件,可能也就不能正常解释UTF-8了吧
    可以实验一下,单纯输出文本的a.jsp文件在WEB-INF\work目录下没有_a__jsp.java和_a__jsp.class