Mysql减法中的奇怪结果

时间:2014-05-11 20:18:56

标签: mysql sql

我在Mysql数据库中有一个简单的表。 表 T 有一个列 A ,类型为tinyint unsigned,lenght 1.我使用该列存储一些布尔值。

当我尝试做一些简单的算术时,我会得到非常奇怪的结果,例如:
SELECT A - 1 FROM T 如果A的值为1,则正确地返回0,但如果A为0,则返回18446744073709551615(我认为ifs 2 ^ 64 - 1)。

我的问题是......为什么,我该如何解决?

编辑:宣布A为签名解决了问题...但我不明白为什么。我得到的可能是如果列是无符号的,-1表示为一个非常大的数字(2 ^ n - 1),但如果结果与您选择的列的类型相同,为什么是64位数?

2 个答案:

答案 0 :(得分:2)

无符号整数不能保持负值

如果你尝试从0减去1,它会循环回到它可以拥有的最大值

http://en.wikipedia.org/wiki/Signedness

不确定这是否有意义但让我知道是否仍然卡住并会尝试更好地解释!

答案 1 :(得分:1)

Unsigned表示变量无法处理负数,即使它是SQL中计算的一部分。
试试signed