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

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

id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT 

 id INT(11) NOT NULL AUTO_INCREMENT 

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

以下是每个INTEGERtypes可以存储的值范围的表格:

MySQL的INTERGER类型和长度
资料来源: http : //dev.mysql.com/doc/refman/5.6/en/integer-types.html

UNSIGNED范围从0n ,而带符号的范围是从-n/2n/2

在这种情况下,你有一个AUTO_INCREMENT ID列,所以你不会有负面的。 因此,使用UNSIGNED 。 如果不使用UNSIGNED作为AUTO_INCREMENT列,那么最大可能值将是一半的高度(而值范围的负半部分将不被使用)。

使用UNSIGNED总是正整数。

基本上用UNSIGNED,你给自己两倍的整数空间,因为你明确指定你不需要负数(通常是因为你存储的值永远不会是负数)。

我认为,UNSIGNED将是以分钟或小时或秒格式存储诸如time_duration(例如:resolved_call_time = resolved_time(DateTime)-creation_time(DateTime))值的最佳选项,其肯定将是非负数

有一件事我想添加在一个有signed int ,这是default value in mysql1 bit将被用来表示sign-1 for negative and 0 for positive. 所以如果您的应用程序只插入正值,则应该更好地指定无符号值。

我不同意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 

如果你知道你要存储的数字的types,你可以select相应的。 在这种情况下,你有'身份证',永远不能否定。 所以你可以使用unsigned int。 有符号整数的范围:-n / 2到+ n / 2无符号整数范围:0到n所以你有两倍的可用正数。 select相应的。