mysql Blob 保存浮点问题

本文记录了一个关于使用Blob类型存储浮点数时遇到的特殊问题及解决方案。当特定形式的浮点数(如以0开头的小数部分)被保存到Blob中时,数据会异常增加。通过调整数据类型为byte[]并使用setBytes方法,成功避免了该问题。

最近要做一个将通信的原始数据保存起来的功能。 数据库使用Blob类型对应java.lang.Blob;

但是发现对于浮点型的小数如果为0的话保存后的数据会出现错误。

测试数据

 

1.00001f(float ),1.00001f(float ),1.00001f(float ),1.00001f(float )

保存前的:

16:3F80 0054 3F80 0054 3FF0 000A 7C5A C472 3FF0 000A 7C5A C472

保存后的:

16: 3F80 0054 3F80 0054 3FF0 5C30 0A7C 5AC4 723F F05C 300A 7C5A C472

比原来的数据多了2位,经过分析后发现好像是将0保存成 /'0'(注意是2个字符 '/'  跟'0') 去了。 所以多了2位。

如果小数第1位不为0就不会出错。

 

花了一段时间查找原因跟解决办法,网上好象也没人碰到过这种问题。

最后看帮助的时候突然看到有个setBytes,就是用byte[]保存,试试,结果成功。也没出现上面的问题。

 

更改方面:数据库还是使用Blob;

但是对象的类型改成byte[],使用hibernate的话,映射文件的类型改为type="byte[]" 就可以了。

 

现在记录一下,对碰到此问题的朋友一点帮助,如果有人知道此问题引起的原因希望也能分享出来。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值