• 欢迎访问我的博客

[转载]Mysql中,int(10)和int(11)的区别

mysql actor 1年前 (2017-08-04) 599次浏览 0个评论 扫描二维码

int(M) M 指示最大显示宽度。最大有效显示宽度是 255。显示宽度与存储大小或类型包含的值的范围无关

首先说一下MySQL的数值类型,mysql支持所有标准 SQL 数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL 和 NUMERIC),以及近似数值数据类型(FLOAT、REAL 和 DOUBLE PRECISION)。关键字 INT 是 INTEGER 的同义词,关键字 DEC 是 DECIMAL 的同义词。

BIT 数据类型保存位字段值,并且支持 MyISAM、MEMORY、InnoDB 和 BDB 表。

作为 SQL 标准的扩展,MySQL 也支持整数类型 TINYINT、MEDIUMINT 和 BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

类型字节最小值最大值
(带符号的/无符号的)(带符号的/无符号的)
TINYINT1-128127
0255
SMALLINT2-3276832767
065535
MEDIUMINT3-83886088388607
016777215
INT4-21474836482147483647
04294967295
BIGINT8-92233720368547758089223372036854775807
018446744073709551615

Mysql 类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。

当结合可选扩展属性 ZEROFILL 使用时, 默认补充的空格用零代替。例如,对于声明为 INT(5) ZEROFILL 的列,值 4 检索为 00004。请注意如果在整数列保存超过显示宽度的一个值,当 MySQL 为复杂联接生成临时表时会遇到问题,因为在这些情况下 MySQL 相信数据适合原列宽度。

所有整数类型可以有一个可选(非标准)属性 UNSIGNED。当你想要在列内只允许非负数和该列需要较大的上限数值范围时可以使用无符号值。

所以 int(10)与 int(11)后的括号中的字符表示显示宽度,整数列的显示宽度与 mysql 需要用多少个字符来显示该列数值,与该整数需要的存储空间的大小都没有关系,int 类型的字段能存储的数据上限还是 2147483647(有符号型)和 4294967295(无符号型)。

浮点和定点类型也可以为 UNSIGNED。同数类型,该属性防止负值保存到列中。然而,与整数类型不同的是,列值的上范围保持不变。

如果为一个数值列指定 ZEROFILL,MySQL 自动为该列添加 UNSIGNED 属性。

对于浮点列类型,在 MySQL 中单精度值使用 4 个字节,双精度值使用 8 个字节。

FLOAT 类型用于表示近似数值数据类型。SQL 标准允许在关键字 FLOAT 后面的括号内选择用位指定精度(但不能为指数范围)。MySQL 还支持可选的只用于确定存储大小的精度规定。0 到 23 的精度对应 FLOAT 列的 4 字节单精度。24 到 53 的精度对应 DOUBLE 列的 8 字节双精度。

MySQL 允许使用非标准语法:FLOAT(M,D)或 REAL(M,D)或 DOUBLE PRECISION(M,D)。这里,“(M,D)”表示该值一共显示 M 位整数,其中 D 位位于小数点后面。例如,定义为 FLOAT(7,4)的一个列可以显示为-999.9999。MySQL 保存值时进行四舍五入,因此如果在 FLOAT(7,4)列内插入 999.00009,近似结果是 999.0001。

MySQL 将 DOUBLE 视为 DOUBLE PRECISION(非标准扩展)的同义词。MySQL 还将 REAL 视为 DOUBLE PRECISION(非标准扩展)的同义词,除非 SQL 服务器模式包括 REAL_AS_FLOAT 选项。

为了保证最大可能的可移植性,需要使用近似数值数据值存储的代码应使用 FLOAT 或 DOUBLE PRECISION,不规定精度或位数。

DECIMAL 和 NUMERIC 类型在 MySQL 中视为相同的类型。它们用于保存必须为确切精度的值,例如货币数据。当声明该类型的列时,可以(并且通常要)指定精度和标度;例如:

salary DECIMAL(5,2)
在该例子中,5 是精度,2 是标度。精度表示保存值的主要位数,标度表示小数点后面可以保存的位数。

在 MySQL 5.1 中以二进制格式保存 DECIMAL 和 NUMERIC 值。

标准 SQL 要求 salary 列能够用 5 位整数位和两位小数保存任何值。因此,在这种情况下可以保存在 salary 列的值的范围是从-999.99 到 999.99。

在标准 SQL 中,语法 DECIMAL(M)等价于 DECIMAL(M,0)。同样,语法 DECIMAL 等价于 DECIMAL(M,0),可以通过计算确定 M 的值。在 MySQL 5.1 中支持 DECIMAL 和 NUMERIC 数据类型的变量形式。M 默认值是 10。

DECIMAL 或 NUMERIC 的最大位数是 65,但具体的 DECIMAL 或 NUMERIC 列的实际范围受具体列的精度或标度约束。如果此类列分配的值小数点后面的位数超过指定的标度允许的范围,值被转换为该标度。(具体操作与操作系统有关,但一般结果均被截取到允许的位数)。

BIT 数据类型可用来保存位字段值。BIT(M)类型允许存储 M 位值。M 范围为 1 到 64。

要指定位值,可以使用 b’value’符。value 是一个用 0 和 1 编写的二进制值。例如,b’111′和 b’100000000′分别表示 7 和 128。

来源链接:http://blog.csdn.net/lyd518/article/details/20703095


iJiaxin 个人博客 , 版权所有丨如未注明 , 均为原创丨转载请注明原文链接:[转载]Mysql 中,int(10)和 int(11)的区别
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
143 queries in 1.391 seconds, using 10.75MB memory