ibatis如何设置编码?

现在遇到这样的情况:
select name from table
这里的name中文正常显示,但如果我使用mysql的AES_ENCRYPT函数对name加密后,然后再解密读起来,name就会乱码
select AES_DECRYPT(UNHEX(name),'123456') as name from table
这样会乱码
如果我使用jdbc,用 rs.getString("name")也乱码,但是用
new String(rs.getBytes("name"),"gbk") 这样就不会乱码

同时使用AES_ENCRYPT来insert也会乱码
所以我怀疑是ibatis在使用该函数的时候可能编码与数据库不对,查了很多资料,都无法正常显示,包括添加Listener的方法:
com.ibatis.common.resources.Resources.setCharset(Charset.forName("gbk"));

1个回答

我觉得是MySQL连接URL的问题吧!

characterEncoding=gbk加上了吗?
默认应该是utf8或系统默认。

j_clxy
clxy大叔 能帮上忙就好哈。结贴,且将结果反馈回来的人太少了。LZ 赞 + 1。
大约 7 年之前 回复
xblueskyleng
xblueskyleng 真是悲剧,我最先用CAST试,没用CONVERT,所以一直不行,结果你提醒,已经成功了。后来细查了下,原来我的MYSQL客户端的character_set_client是utf8,所以一直客户端行,但程序不行。很少使用问题,找不到追加分数的地方可以感谢你。。。
大约 7 年之前 回复
j_clxy
clxy大叔 又查了下,貌似是MySQL5.5.x的解密的问题。 解决办法,要么是你的在java里转码。要么用convert在mysql里转码。 [code="sql"] select CONVERT(AES_DECRYPT(UNHEX(name),'123456') USING GBK) as name from table [/code]
大约 7 年之前 回复
xblueskyleng
xblueskyleng 这个是加过的了,数据库是GBK的,还是不了解底层,不知道为什么多了一层就会乱码
大约 7 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐