关于ssh持久化中文数据乱码问题

这几天尝试着编一个类似于贴吧的东西,勉为其难叫他贴吧好了。基于ssh的,包括登录,注册,增删查改帖子,写评论什么的。

最近发现一直用英文作为贴吧的输入语言,发帖回复什么的都使用英语。偶尔使用中文输入却发现无法将帖子等信息通过hibernate持久化到mysql数据库表中。

这可让我有点小尴尬。

起先,在书上找了个filter过滤器,当然这个过滤器写在web.xml上:

<!-- 定义解决汉字编码转换的过滤器 -->
<filter>
	<filter-name>chinacode</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
</filter>
	
<filter-mapping>
	<filter-name>chinacode</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 定义解决汉字编码转换的过滤器 -->

尝试了一下,是不是由于过滤器没有设置导致的无法持久化。在调用持久化方法save()前,我使用输出方法将要插入数据库的数据显示在控制台上,发现控制台上好好的写着中文的数据。Plan A 宣告失败。

查阅了百度经验,发现有网友也出现同样的问题,他们的解决方案是将数据库中的数据字符集修改为UTF-8,因为默认的是什么I开头的一个单词,反正我也记不住了,反正就是保证数据库和网页中的数据编码类型相同均为UTF-8。说干就干,上图:

 

全部改完后,将贴吧重新部署,发现仍然没有将中文数据插入到数据库中去。

 

Plan B宣告失败。爆句脏口~艹~

仔细分析一下,既然mysql数据库中编码形式正确,前端数据编码也是正确的,那么只有在调用hibernate的save()方法时才出现问题,而本贴吧是由spring来控制hibernate的

故要去applicationContext.xml中找到控制hibernate的配置,经过查阅资料,原来可以通过如下代码控制hibernate的编码方式

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
  <property name="url"value="jdbc:mysql://localhost:3306/你的数据库名称?characterEncoding=UTF-8"></property>
</bean>

终于,搞定了:

以后一定要记住在开发javaweb的时候,数据库,网页等有关于数据增删查改的动作一定要规范编码格式,保持一致,不能太混乱。


 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值