我什么时候应该在MySQL中使用UNSIGNED和SIGNED INT?

时间:2012-07-17 03:23:13

标签: mysql

我什么时候应该在MySQL中使用UNSIGNED和SIGNED INT? 什么是更好的使用或这只是个人的偏好? 因为我看到它像这样使用了;

id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT

id INT(11) NOT NULL AUTO_INCREMENT

8 个答案:

答案 0 :(得分:140)

UNSIGNED仅存储正数(或零)。另一方面,签名可以存储负数(即,可能有负符号)。

以下是每个INTEGER类型可以存储的值范围表:

MySQL INTEGER types and lengths
来源:http://dev.mysql.com/doc/refman/5.6/en/integer-types.html

UNSIGNED的范围从0 n ,而签名范围从大约-n/2n/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作为主键。