遇到这个问题是在nodejs环境,不过这个问题是mysql的问题。
mysql有个配置项:ERROR_FOR_DIVISION_BY_ZERO
。
如果有这个配置项,那么在执行update
、insert
语句时,分母就不能为0
,否则就会报除零异常。但是有个特例,就是如果分子为null
,那么null / 0
不会报错,因为mysql中有null
的运算结果都是null
。
可以通过下面的语句查看自己的mysql是否添加了这个配置项:
select @@global.sql_mode;
// STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
如果有的话,可以将ERROR_FOR_DIVISION_BY_ZERO
剔除,重新设置:
SET @@GLOBAL.sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
注意,这样设置,一旦重启mysql,配置就失效了。因此还需要修改,在
mysqld
下添加如下配置:
sql-mode = "STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
这时可以不用重启mysql,因为已经用set @@global
设置过了,等后面重启的时候也会起作用。