java(jsp)使用MySql数据库,中文乱码的完整解决方案
mysql是一个小型的开源的数据库,用来自学一些技术是十分方便的。但使用mysql存储数据,也会遇到一些非常恶心的问题,如:中文乱码问题、java驱动程序无法使用的问题(已经解决,详见:http://hi.baidu.com/lauo1988/blog/item/ff0da655bd3e2eceb745ae0b.html)。 对于中文乱码问题。网上搜索得到的解决方案比较多,主要还是设置mySql的配置文件。这些都比较麻烦,但是设置成功的话,的确能够一劳永逸。但我尝试了很多次网上的方法,都不能很好的解决这个问题。乱码依然存在。想想,要做网站的话,用mySql数据库存放数据,中文都不能很好支持的话,做这东西是没有用的! 最终,我按照:将中文字字符串,按照无损编码的方式,对其进行编码,然后直接存于数据库中。当要取出数据时,再将中文字符串解码。这样可以达到存储中文字符串,又不会产生乱码的目标。 我在网上找到了一些无损编码的方式,详见:http://www.cnblogs.com/qiren5761/articles/523790.html 我采用了里面的:“String-GBK〉ByteArray-ISO-8859-1〉String-ISO-8859-1〉ByteArray-GBK〉String ”的编码/解码方式。 主要的java处理函数如下: /* /* 当然,对于sql操作,不管是插入还是查询,sql语句必需先经过encode函数编码,然后得到的查询结果使用decode,可以恢复到需要的中文字串。举例如下: /* 方法总结: 优点:无需对mySql的charset进行重新配置,只需要使用encode、decode对相应的sql语句进行编码及解码,即可实现中文字符串在mysql中的完整存储。 缺点:每一个sql语句,都需要再编码(encode);每一个包含中文字串的查询结果,都需要解码decode jsp使用此方法进行查询及相应的操作时,应该注意网页得到的表单的数据编码为iso-8859-1,应该注意转换。使用以下方法: user = bbsDbm.encode(user,"iso-8859-1","gb2312");//jsp网页属性为:charset=gb2312 此encode函数为:(bbsDbm:我的bbs系统数据库管理类,用以实现数据库操作,---javaBean) public static String encode(String str,String charset1,String charset2) 简单而言:注意编码、解码的无损性,保证数据库存储的是完整中文数据,从数据库提取信息,也要无损解码。对于jsp,只要正确知道,当前页面所使用的charset,以及网页表单提交的数据的默认编码,即可对其进行再解码。 至此,完整的jsp、java使用mySql数据库,产生中文乱码的完整解决方案已经呈现在你的面前。 |