123

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

id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT

id INT(11) NOT NULL AUTO_INCREMENT
4

8 回答 8

196

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

INTEGER这是每种类型可以存储的值范围的表格:

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

UNSIGNED范围从0to n,而有符号的范围从 about -n/2to n/2

在这种情况下,您有一个AUTO_INCREMENTID 列,因此您不会有底片。因此,使用UNSIGNED. 如果您不使用UNSIGNEDAUTO_INCREMENT列,则您的最大可能值将是原来的一半(并且值范围的负半部分将未被使用)。

于 2012-07-17T03:25:59.827 回答
8

用于UNSIGNED非负整数。

于 2012-07-17T03:25:55.730 回答
5

基本上UNSIGNED,您为整数提供了两倍的空间,因为您明确指定不需要负数(通常是因为您存储的值永远不会是负数)。

于 2015-11-21T16:14:44.043 回答
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  
于 2017-07-18T12:29:06.290 回答
1

对于负整数值,SIGNED使用,对于非负整数值,UNSIGNED使用。它总是建议使用UNSIGNEDid 作为主键。

于 2019-10-14T05:11:20.513 回答
0

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

于 2016-01-15T16:55:32.680 回答
0

如果您知道要存储的号码类型,则可以进行相应选择。在这种情况下,您的“id”永远不会是负数。所以你可以使用无符号整数。有符号整数的范围:-n/2 到 +n/2 无符号整数的范围:0 到 n 所以你有两倍的可用正数。相应地选择。

于 2017-07-18T12:36:58.023 回答
0

我想在 a 中添加的一件事signed int,即default value in mysql1 bit将用于表示sign-1 for negative and 0 for positive. 因此,如果您的应用程序仅插入正值,则最好指定无符号。

于 2016-08-17T05:55:31.947 回答