一、mysql除法报错1365 - Division by 0
mysql 5.5升级到5.7后对数据库的要求更加严格了,所以我们在升级之后的一系列的操作都会失败。
select @@global.sql_mode;//查询全局的sql_mode,
select @@sql_mode;//查询补充系统变量sql_mode;
注:ERROR_FOR_DIVISION_BY_ZERO 在insert或update过程中,如果数据被零除,则产生错误而非警告。如果未给出该模式,那么数据被零除时Mysql 返回NULL
这边因我的存储过程中的update语句中有分母为0的情况,所以升级到5.7之后存储过程的执行就会一直出现
division by 0的错误,一开始想出来了2个解决方案:
1.给分母上加上nullif(param1,param2)的函数
nullif的意思是,如果param1=param2,那么返回为true,这个结果返回为null
否则的话返回的是param1的内容
这种方案虽然能解决问题,但是改起来太慢了,如果存储过程很多的话,又是重复工作量。
2.修改sql_mode
因为数据库是放在linux上,但是用docker部署的,因为不知道mysql的映射的配置文件,所以很尴尬,只能
在navicat这边用语句处理,mysql一旦重启后就失效了。
linux版的话修改下mysql.cnf文件,在文件中加入sql_mode的设置。
windows版的话修改下my.ini文件,在文件中加入sql_mode的设置。
这里设置完之后都要重启才能生效。
如果没法修改配置文件,我们在navicat中,执行语句也可以的
(1)可以直接设置sql_mode为空
set sql_mode=“”;
set @@global.sql_mode =“”;
flush privileges;
(2)可以将sql_mode设置为非严格模式
set sql_mode=“ANSI”;
set @@global.sql_mode =“ANSI”;
flush privileges;




