【www.gdgbn.com--mysql教程】

在建立数据库教程字段的时候,遇到数字类型的时候,如int(4),我曾经一度认为是长度,后来测试的时候发现无论我设置多少,都不影响插入数据的长度,在网上搜了相关的解释如下:


mysql教程 int(x) 中 x 的含义
这个可选的宽度规格说明是用于在数值显示时,对某些值的宽度短于该列宽度的值进行左填补显示的,而不是为了限制在该列中存储值的宽度,也 不是为了限制那些超过该列指定宽度的值的可被显示的数字位数。注意,如果在一个整型列中存储一个超过显示宽度的更大值时,当 mysql 为某些复杂的联结(join)生成临时表时,你可能会遇到问题,因为在这种情况下,mysql 信任地认为所有的值均适合原始的列宽度。

而int本身就是4个字节 bigint是8个字节 所以说int(x)的含义就是 int决定数据存储的字节 x表示期望数据的列宽度

在sql语句中int代表你要创建字段的类型,int代表整型,11代表字段的长度。

这个代表显示宽度
整数列的显示宽度与mysql需要用多少个字符来显示该列数值,与该整数需要的存储空间的大小都没有关系,比如,不管设定了显示宽度是多少个字符,bigint都要占用8个字节。

 

作为对 ansi/iso sql92 标准的一个扩展,mysql 也支持整型类型 tinyint、mediumint 和 bigint。另外一个扩展是 mysql 支持随意指定一个整型数值的显示格式,这通过在类型的基本关键词后跟一个括号来实现(例如 int(4))。这个可选的宽度规格说明是用于在数值显示时,对某些值的宽度短于该列宽度的值进行左填补显示的,而不是为了限制在该列中存储值的宽度,也不是为了限制那些超过该列指定宽度的值的可被显示的数字位数。当与可选的扩展属性 zerofill 一起使用时,缺省填补用的空格被零代替。举例来说,一个列被定义为 int(5) zerofill,插入的值 4 被检索出来时为 00004。注意,如果在一个整型列中存储一个超过显示宽度的更大值时,当 mysql 为某些复杂的联结(join)生成临时表时,你可能会遇到问题,因为在这种情况下,mysql 信任地认为所有的值均适合原始的列宽度。 
 

不过我在mysql(windows下)中,还从来没有试出过zerofill的功能


int(m),integer(m)  32位整数(4字节....)

    其实这个m跟int能表示的范围没有关系,只要你选择了int,int是用4个字节表示,1个字节8位,若表示无符号数时可以表示的范围是 0 ------- 232-1 ,你可以存储任何在这个范围内的数字。

    但也不是说跟表示完全没关系,mysql中有个zerofll,当建表时选择了0 填充之后存储就会有很大的不同,这时如果你选择的是int(4) 你存储12则数据库中存储的是0012,如果填写12345,此时超过了他的指定宽度则按原样存储。

本文来源:http://www.gdgbn.com/shujuku/29098/