我在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位数?
答案 0 :(得分:2)
无符号整数不能保持负值
如果你尝试从0减去1,它会循环回到它可以拥有的最大值
http://en.wikipedia.org/wiki/Signedness
不确定这是否有意义但让我知道是否仍然卡住并会尝试更好地解释!
答案 1 :(得分:1)
Unsigned
表示变量无法处理负数,即使它是SQL中计算的一部分。
试试signed
。