mysql+jdbc查询结果小数变成了ASCII数组

记录工作中遇到的一个问题:

今天写公司的项目,直接使用JdbcTemplate跑sql的,跑出来的结果封装List>返回。结果遇到了问题,如图:


sql内容: IFNULL(format(loginTimes / loginUsers, 2),0) AS TU 格式化登录次数/登录用户的结果,保留2位小数。

jdbc查询完成后,获取到的结果变成了ASCII数组:

mysql+jdbc查询结果小数变成了ASCII数组_第1张图片

这就很尴尬了。

然后想办法解决。先说解决方法吧

IFNULL(CONVERT(format(loginTimes / loginUsers, 2) USING utf8),0) AS TU

把sql查询的结果,修改了一下这个字段的编码。


下面是做的工作:

第一步:分别连接本地测试库和服务器测试数据库对比,发现只有本地测试库查询的时候会出现这个问题,连接服务器测试时,正常返回了小数。

第二步:对比服务器测试库和本地测试库,发现数据库编码有点差异,修改之。 修改完成后测试,发现结果还是有问题,失败。

第三步:跟踪代码,对比两次jdbc查询后封装结果时的信息。

先上错误结果时的信息

下面这个方法是jdbc处理查询结果时的方法,将ResultSetMetaData转换为Map.

mysql+jdbc查询结果小数变成了ASCII数组_第2张图片


查看转换之前的数据,发现第五个字段,就是TU的编码是US-ASCII,而查询服务器测试库返回的结果里,这个编码是utf-8.

mysql+jdbc查询结果小数变成了ASCII数组_第3张图片

正确的列,获取到的className是正常的数据类型。


mysql+jdbc查询结果小数变成了ASCII数组_第4张图片

而TU列的类型确变成了这个:

mysql+jdbc查询结果小数变成了ASCII数组_第5张图片


虽然发现了这个差异,但是还是找不到是哪里出错了。

只是bing了一下,找到MySQL的CONVERT函数,将TU的查询结果重新编码了一下。 至于问题的根源,我会继续找,不过要等先把事情做完了= =、如果有人看到了这个问题,并且知道为什么。请告诉我好不好。。。


你可能感兴趣的:(工作问题,mysql,US-ASCII,jdbc)