Mysql执行Sql语句报错:BIGINT UNSIGNED value is out of range,后面上网查资料测试解决了,发现是表结构与sql语句执行之间的冲突.
测试:
建表语句:
CREATE TABLE `numtest` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`num1` smallint(5) UNSIGNED NOT NULL DEFAULT 0,
`num2` smallint(5) UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
插入数据:
INSERT INTO `numtest` (`id`, `num1`, `num2`) VALUES (NULL, '2', '5'), (NULL, '2', '6');
执行的SQL语句:
SELECT (num1 - num2) as num FROM numtest WHERE id=1;
结果:
BIGINT UNSIGNED value is out of range
之所以会报这个错是因为,sql查询两个字段相减的结果,结果为负数,导致了这个报错.
Mysql在处理两个字段类型为整数(int 家族)相减的时候,如果其中有一个是UNSIGNED INT 类型的,那么结果被当做是UNSIGNED.
因此,在建表的时候需要考虑到这点,避免有时候一些不必要的错误.当然,也有其他的解决方案,可以修改SQL_MODE,可以在mysql中执行下面的语句,可以让上面报错的SQL语句不会产生错误:
SET sql_mode='NO_UNSIGNED_SUBTRACTION';
这个改变的是Mysql的配置,不太建议使用..