关于字符的又一问题--已解决,与mysql有关

曾经以为自己对字符乱码很清楚了,今天又出现了一个问题。

先说说系统框架:struts2+hibernte3.3+sprint2.5,linux+resin+mysql

在我的电脑(windows)下没有问题,布到服务器后,出现问题。

问题:

        1.从表单输入特殊汉字,比如“涅槃”,页面显示为“涅??”,但奇怪的是,数据库里数据正确。

        2.将从数据库读到的??转换成字节,打印为63 63,而正确应为-104,-124

        3.从表单输入“涅槃”搜索,结果为空。。搜索"涅%",却出现包括涅槃在内,以及没有涅字的一些数据。

疑问:

       在哪一步出现了编码问题?为什么只针对特殊汉字?注字符集设置为GBK,理论上不应该出问题才是。

 

------------------------------------------------------------------------------------------------------------------------------------------------------

解决:首先先允许我大笑三声。高兴的!

问题1、2:

       步骤1:使用java.sql里的类,连接、查找、得到ResultSet,取rs.getString(1).getBytes(),打印为63 63;

                     可知,与hibernate无关,但数据库里数据正确,应该是在取数据时,里某些内部操作造成。

       步骤2:还是以面的ResultSet,使用rs.getBytes(),打印为-104,-124。。。。正确。。高兴

                     可知以字符流的形式可以正确读出。

                    然后查看了mysql的编码设置  与 我电脑上不同的有:

                                        character_set_server与database=binary    我的为 latin1

                    有点意思了。我们知道MYSQL的输入,读出过程为

                                         latin1-->      latin1  --> binary         binary --> latin1    -->   latin1

                                         client-->connection-->server   与  server-->connection-->client

                    应该是在server-->connection出现意外??

            所以,心里有两个方法:

                   A。设置配置文件character_set_server=latin1-------------因为我没有服务器root权限,没有验证

                   B。将hibernate配置文件里相关字段类型由string改为binary ,java文件相关字段由string改为byte[],此方法验证正确

问题3:

          出现搜索问题是因为mysql的缺陷,select语句改为 where binary btitle='涅%'  即可。。字段名前加上binary

                                       

                                  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值