在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 没有涵盖这个负值的添加。这是有意的还是错误的?