我什么时候应该在 MySQL 中使用 UNSIGNED 和 SIGNED INT ?什么更好用或者这只是个人喜好?因为我见过它是这样使用的;
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT
和
id INT(11) NOT NULL AUTO_INCREMENT
我什么时候应该在 MySQL 中使用 UNSIGNED 和 SIGNED INT ?什么更好用或者这只是个人喜好?因为我见过它是这样使用的;
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT
和
id INT(11) NOT NULL AUTO_INCREMENT
UNSIGNED
只存储正数(或零)。另一方面,signed 可以存储负数(即,可能有一个负号)。
INTEGER
这是每种类型可以存储的值范围的表格:
来源:http ://dev.mysql.com/doc/refman/5.6/en/integer-types.html
UNSIGNED
范围从0
to n
,而有符号的范围从 about -n/2
to n/2
。
在这种情况下,您有一个AUTO_INCREMENT
ID 列,因此您不会有底片。因此,使用UNSIGNED
. 如果您不使用UNSIGNED
该AUTO_INCREMENT
列,则您的最大可能值将是原来的一半(并且值范围的负半部分将未被使用)。
用于UNSIGNED
非负整数。
基本上UNSIGNED
,您为整数提供了两倍的空间,因为您明确指定不需要负数(通常是因为您存储的值永远不会是负数)。
我不同意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
对于负整数值,SIGNED
使用,对于非负整数值,UNSIGNED
使用。它总是建议使用UNSIGNED
id 作为主键。
我认为,以分钟或小时或秒格式UNSIGNED
存储time_duration
(例如:)resolved_call_time = resolved_time(DateTime)-creation_time(DateTime)
值之类的值肯定是非负数的最佳选择
如果您知道要存储的号码类型,则可以进行相应选择。在这种情况下,您的“id”永远不会是负数。所以你可以使用无符号整数。有符号整数的范围:-n/2 到 +n/2 无符号整数的范围:0 到 n 所以你有两倍的可用正数。相应地选择。
我想在 a 中添加的一件事signed int
,即default value in mysql
,1 bit
将用于表示sign
。-1 for negative and 0 for positive.
因此,如果您的应用程序仅插入正值,则最好指定无符号。