科学计数法入库问题 _JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 科学计数法入库问题

科学计数法入库问题

 2019/1/8 15:37:38  hbxflihua  程序员俱乐部  我要评论(0)
  • 摘要:最近在做项目时遇到一个问题,同一个方法中两次更新入库,其中一次成功,一次没执行。我先是排查应用程序日志,发现程序日志并没有异常,然后根据执行时间查了mysql的binlog日志。binlog日志查看脚本如下:/usr/local/mysql/bin/mysqlbinlog-v--start-datetime='2018-12-2617:55:00'--stop-datetime='2018-12-2617:57:00'logs/mysql-bin.000004>/tmp/tmp
  • 标签:

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

binlog日志查看脚本如下:

class="sql">/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是弱类型,直接将科学计数法转成字符串即可解决问题。

  • 相关文章
发表评论
用户名: 匿名