本人菜鸟一只,今天弄了一个下午这个中文字符问题,在学SSH 的时候,进行的一般小测试都是输入英文字母,所以也没发现这么大问题,但是今天在jsp页面中输入中文的时候,发现就不对了。。。

通过一部分一部分的测试,发现从jsp页面中读取的字符显示是中文,可是在Mysql中存的时候就变乱码了。

以前对于这些不同页面的字符设置都没有在意,今天算是了解了一点,首先从前台传入,在经过struts和hibernate的操作,最后进入mysql,这一系列过程中都有可能出现问题,要在这其中一步步显示内容才能了解到问题到底出在哪里。我的问题是在存入mysql的时候。

在网上查了好多资料,虽然很多,但是五花八门的,很杂。

最后尝试了各种方法后,我觉得就是要让jsp,struts,hibernate,mysql中的表字符类型都要保持一致,这里我用的是utf-8

在jsp中设置<%@ page language="java" contentType="text/html; charset=UTF-8"%>

在struts.xml中设置<constant name="struts.i18n.encoding" value="UTF-8"></constant>

在连接Mysql设置jdbc.url=jdbc:mysql://localhost:3306/spring?characterEncoding=UTF-8

在建表的时候设置也是utf8

 理论上来说,这样应该就可以实现中文字符的显示和存储了!

但是由于我的mysql没有安装图形界面的软件,所以在那个dos窗口中看到的内容还是"???"。。。就是这个原因让我觉得自己一直都做的不对,都有摔键盘的冲动了。。。

最后在安装了一个mysql_front 后,在里面我看到了中文!!!这说明我前面的配置都是正确的,只是在dos窗口中无法显示中文而已。

接下来又去网上查了查,对mysql的各种字符设置的地方了解了一点。

安装好后的mysql,所以默认设置都是latin1,要想建存中文的表,要输入: set character_set_database = utf8;

要想在其中看到中文,要输入:

set character_set_client = utf8;
 set character_set_connection = utf8;
 set character_set_results = utf8;

这样中文也就可以显示出来了。

搞了一下午,虽然做了很多”无用功”,但是还是了解到了很多,收获挺大。正所谓程序员就是在错误中慢慢成长的嘛。。