我什么时候应该在MySQL中使用UNSIGNED和SIGNED INT? 什么是更好的使用或这只是个人的偏好? 因为我看到它像这样使用了;
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT
和
id INT(11) NOT NULL AUTO_INCREMENT
答案 0 :(得分:140)
UNSIGNED
仅存储正数(或零)。另一方面,签名可以存储负数(即,可能有负符号)。
以下是每个INTEGER
类型可以存储的值范围表:
来源:http://dev.mysql.com/doc/refman/5.6/en/integer-types.html
UNSIGNED
的范围从0
到 n
,而签名范围从大约-n/2
到n/2
。
在这种情况下,您有一个AUTO_INCREMENT
ID列,因此您不会有负片。因此,请使用UNSIGNED
。如果您没有对UNSIGNED
列使用AUTO_INCREMENT
,则最大可能值将会增加一半(并且值范围的负半部分将不使用)。
答案 1 :(得分:7)
将UNSIGNED
用于非负整数。
答案 2 :(得分:4)
基本上使用UNSIGNED
,您可以为整数提供两倍的空间,因为您明确指出不需要负数(通常因为您存储的值永远不会为负值)。
答案 3 :(得分:1)
我不同意 vipin cp 。
确实是第一位用于表示符号。但 1 为负数, 0 为正值。更多超负值以不同方式编码(二进制补码)。使用TINYINT的示例:
The sign bit
|
1000 0000b = -128d
...
1111 1101b = -3d
1111 1110b = -2d
1111 1111b = -1d
0000 0000b = 0d
0000 0001b = 1d
0000 0010b = 2d
...
0111 1111b = 127d
答案 4 :(得分:0)
我认为,UNSIGNED
是存储time_duration
(例如:resolved_call_time = resolved_time(DateTime)-creation_time(DateTime)
)值的最佳选择,以分钟或小时或秒格式存储,这肯定是非负面的编号
答案 5 :(得分:0)
我想补充一点
在signed int
default value in mysql
中,1 bit
将用于表示sign
。 -1 for negative and 0 for positive.
因此,如果您的应用程序仅插入正值,则应更好地指定unsigned。
答案 6 :(得分:0)
如果您知道要存储的数字类型,您可以选择相应的数字。 在这种情况下,你的'id'永远不会是负面的。所以你可以使用unsigned int。 signed int的范围:-n / 2到+ n / 2 无符号整数范围:0到n 所以你有两倍的正数可用。 选择相应的。
答案 7 :(得分:0)
对于负整数值,使用SIGNED
,对于非负整数值,使用UNSIGNED
。始终建议将UNSIGNED
用作id作为主键。