1

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

4

0 回答 0