Mysql:将带符号的负值添加到带有否定结果的unsigned

时间:2013-02-21 12:45:19

标签: mysql

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

0 个答案:

没有答案