当在mysql中减去两个无符号值时,结果也将是无符号的。从5.5.5开始,如果结果为负,则mysql会抛出错误。
但在我的情况下,我需要消极的结果。我已经了解到,这可以通过设置sql_mode ='NO_UNSIGNED_SUBTRACTION'来实现。
参见下表:
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`s` INT SIGNED,
`u1` INT UNSIGNED,
`u2` INT UNSIGNED
);
INSERT INTO `test` VALUES (-1, 0, 1);
SET sql_mode='NO_UNSIGNED_SUBTRACTION';
SELECT `u1` - `u2` FROM `test`;
SELECT的结果是-1,正如预期的那样。但如果我这样做,
SELECT `s` + `u1` FROM `test`;
在数学上是一样的,我仍然得到错误“BIGINT UNSIGNED值超出范围”(用mysql 5.5.29测试)。
我知道,这可以通过转换无符号值来修复,但我想知道,是否存在类似于减法的全局解法,我不必更改所有受影响的查询。
毕竟我想知道为什么NO_UNSIGNED_SUBTRACTION没有涵盖这个负值的添加。这是故意还是错误?