创建表格时,我经常使用INTEGER
列AUTO_INCREMENT
作为主键(代理键),如下所示:
CREATE TABLE 'my_table' (
user_id INTEGER AUTO_INCREMENT PRIMARY KEY,
[…]
);
(请注意,省略号仅用于重点关注重要事项。)
现在我已经读过INTEGER
列可以保存从-2,147,483,648到2,147,483,647的整数,以及无符号时从0到4,294,967,295的整数。
由于user_id
将始终是无符号的(如果我没有记错,MySQL将从0开始计数),将此列明确标记为UNSIGNED
以允许更多用户存储在该表中是否有意义( 4,294,967,295而不是2,147,483,647)?
答案 0 :(得分:1)
无符号可以根据该字段改进您的查询。
除此之外,没有真正的区别
请参阅此链接中的文章>> Signed vs Unsigned了解有关为何查询速度更快的更多信息。
假设以下查询,其中'quantity'是INT字段。
SELECT *
FROM customer
WHERE quantity <= 500
如果quantity
不是无符号,那么数量字段是“int”并且您有此字段的索引,MySQL会将范围定义为-2147483648到500并且它将根据此范围得到结果。
但是,如果quantity
字段 IS 无符号,那么该范围将为0 - 500.范围要小得多。
此处适用的唯一其他约定是实际存储信息。无符号,因为它的基数为0-4m,因为二进制计数更高,需要更多存储空间。签名时,如果是正数或负数,则为0-2m,标记为1位。这样可以减少存储需求。
如果您想节省空间,请使用Signed
。
如果您想要速度,请使用Unsigned
。
答案 1 :(得分:1)
根据http://dev.mysql.com/doc/refman/5.0/en/integer-types.html,UNSIGNED INT的大小和签名的INT,因此不会对您的选择产生影响。据我所知,AUTO_INCREMENT从1开始,所以如果您认为需要超过2,147,483,647行,请选择unsigned int。