【问题标题】:mysql: issue with the Maximum Value for int typemysql:int类型的最大值问题
【发布时间】:2013-08-19 09:42:12
【问题描述】:

我使用mysql创建了两个字段text(varchar)number(int)。但我不确定我应该为varchar()int()varchar() 设置什么大小,我在这里查看:http://dev.mysql.com/doc/refman/5.0/en/char.html,并且知道我是否设置了varchar(4),这意味着:最多可以容纳 4 个字符.但是对于int(4),我这里查了一下:http://dev.mysql.com/doc/refman/5.0/en/integer-types.html,据说是:Maximum Value:(Signed/Unsigned)(2147483647/4294967295)

问题:

对于int(4),它是如何得到这个值2147483647/4294967295的?如果我输入int(8),值是多少?

【问题讨论】:

标签: mysql


【解决方案1】:

See the MySQL Numeric Type Documentation。这些东西都有据可查。

签名INT 的范围是 [-2147483648, 2147483647]。

注意在INT(x)的情况下,x是“显示宽度”,与范围或空间要求无关:

MySQL 支持扩展,用于在类型的 base 关键字后面的括号中可选地指定整数数据类型的显示宽度。例如,INT(4) 指定显示宽度为四位的 INT ...显示宽度不会限制 [或扩展] 列中可以存储的值的范围。 p>

Mysql int(11) number out of range

【讨论】:

  • 对 64 位值使用 BIGINT。任意精度/大小的用户字符串和自定义转换。
【解决方案2】:

int(4) 一个显示宽度为四位的 INT。

int(8) 一个显示宽度为八位的 INT。

Minimum Value/Maximum Value 与使用 4 个字节存储的 int 类型相同。

-21474836482147483647 用于签名,04294967296 用于未签名。

【讨论】:

    【解决方案3】:

    嗯,从浏览器控制台我注意到:

    Math.pow(2, 4*8)4294967296,一半是 2147483648

    这些是可以使用 4 个 8 位字节以二进制形式存储的最大(无符号/有符号)整数的 1。

    【讨论】: