科学计数法入库问题

阅读更多

 最近在做项目时遇到一个问题,同一个方法中两次更新入库,其中一次成功,一次没执行。我先是排查应用程序日志,发现程序日志并没有异常,然后根据执行时间查了mysql的binlog日志。

binlog日志查看脚本如下:

/usr/local/mysql/bin/mysqlbinlog -v --start-datetime='2018-12-26 17:55:00' 
--stop-datetime='2018-12-26 17:57:00' logs/mysql-bin.000004 >/tmp/tmp.sql
 
  

 binlog日志显示确实只执行了一次更新操作

### UPDATE `user_currency`
### WHERE
###   @1=15
###   @2=203
###   @3=17
###   @4=318.2131053694
###   @5=287.7714971818
###   @6=30.4416081876
###   @7='2018-12-26 17:39:57'
### SET
###   @1=15
###   @2=203
###   @3=17
###   @4=348.4720639080
###   @5=318.0304557204
###   @6=30.4416081876
###   @7='2018-12-26 17:39:57'
# at 14487394
 update user_currency set available_money = available_money + ?, where user_id = ? and currency_id = ? 
update user_currency set available_money = available_money + ?, where user_id = ? and currency_id = ? 
update user_currency set available_money = available_money + ?, where user_id = ? and currency_id = ? 
update user_currency set available_money = available_money + ?, where user_id = ? and currency_id = ? 

对应参数分别是:
0E-20(BigDecimal), 49(Long), 17(Long), 
2.7377658553(BigDecimal), 49(Long), 4(Long)
23.30465650830011440000(BigDecimal),59(Long), 17(Long)
0(BigDecimal), 59(Long), 4(Long)

 

我将两次的更新合并到一起,改为批量操作,并且在测试环境开启了sql日志打印。第二天测试部门反馈还是存在这个问题。我把当天的日志拉出来比对,发现在批量更新时sql是有的,奇怪的是其中一个sql中的某个数值是科学计数法。

 

 问题终于找到了,那解决问题就简单多了。mysql是弱类型,直接将科学计数法转成字符串即可解决问题。

你可能感兴趣的:(java,sql)