我有一些现在大于INT可以处理的数字。
这有点令人尴尬,但老实说我并不确切知道BIGINT(8)的含义。 8是最大位值还是最大长度?
那么BIGINT(1)只能是一位数?或者是BIGINT(1)还有别的吗?我认为tinyint(1)max是127,这是怎么回事?
BIGINT能做的最大的是什么? 我可以作为整数存储在mysql中的最大数字是多少?
答案 0 :(得分:37)
数字表示它的显示方式 - 它不会影响数据的存储方式。
来自the manual:
MySQL支持另一个扩展,可选择在类型的base关键字后面的括号中指定整数数据类型的显示宽度(例如,INT(4))。应用程序可以使用此可选显示宽度来显示宽度小于为列指定的宽度的整数值,方法是用空格填充它们。 (也就是说,此宽度存在于使用结果集返回的元数据中。是否使用它取决于应用程序。)
显示宽度不会限制可以存储在列中的值的范围,也不会限制宽度超过为列指定的值的值显示的位数。例如,指定为SMALLINT(3)的列的通常SMALLINT范围为-32768到32767,超出三个字符所允许的范围之外的值将使用三个以上的字符显示。
BIGINT总是8个字节,可以存储-9223372036854775808到9223372036854775807(带符号)或0到18446744073709551615(无符号)。
答案 1 :(得分:10)
你回答的是this overview。 BIGINT确实是8个字节。只有1个TinyInt。
顺便说一句,我不认为从-9223372036854775808
到9223372036854775807
的范围非常尴尬,它是+/- 2 ^ 63 :)。
答案 2 :(得分:4)
该数字仅定义显示时的数字宽度。看一下sizes of numeric types的mysql手册。
答案 3 :(得分:4)
括号之间的数字是'显示宽度',与数据类型实际存储的数字范围无关。
BIGINT的范围是-9223372036854775808到9223372036854775807.无符号范围是0到18446744073709551615。
您可以在此处找到更多信息:http://dev.mysql.com/doc/refman/5.4/en/numeric-type-overview.html
答案 4 :(得分:3)
要存储128位整数,可以使用BINARY(16)。
对于252:
SELECT RIGHT(CONCAT(REPEAT(“\ 0”,16),UNHEX(CONV(252,10,16))),16);
或等效地:
SELECT UNHEX(RIGHT(CONCAT(REPEAT(“0”,32),HEX(252)),32));
(但MySQL整数计算是64位)
另请参阅最近的IPv6函数INET6_ATON()和INET6_NTOA(), http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html#function_inet6-aton 以及他们如何使用VARBINARY(16)。