全部博文(43)
分类: Mysql/postgreSQL
2011-05-14 19:09:21
在实数之下,又细分为TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT,分别占用8、16 、24 、32和64bits。同时,还可以在其后跟一个UNSIGNED修饰符,使之成为无符号整数。
需要注意的是,这些类型的字长不同只是表示数据在硬盘和内存中存储所占用的字长。即使是在32位机器上,MySQL在做整数计算时,也会自动的使用64-bit的BIGINT——除了在某些统计类函数中,这些函数为了精度使用了浮点戒双精度浮点型。
MySQL lets you specify a "width" for interger types,such as INT(11).This is meaningless for most applications:it does not restrict the legal range of values,but simply specifies the number of characters MySQL's interactive tools(such as the command-line clint) will reserve for display purposes.
原文意思:MySQL允许用户自定义整数的宽度,如INT(11)。但是对于大多数应用,这样做并没有什么用:这样的定义并不是限定有效数据的宽度,而只是说,在MySQL的交互工具(如命令行控制台)中,用于显示这一列数据的宽度。
原文的后半句,即自定义宽度在交互工具中的作用说的不是特别清楚。
实际的意思是,当指定了INT(11)后,如果在列中存储了不足指定宽度(这里是11)的值,显示的时候会在左侧进行填补显示,当存储了超过指定宽度的值,就按值的实际宽度显示。
CREATE TABLE `width` (
`num` int(2)default NULL
)ENGINE=MyISAM DEFAULT CHARSET=latin1;
insert into width values(5);
insert into width values(555);
CREATE TABLE `width_2` (
)ENGINE=MyISAM DEFAULT CHARSET=latin1;
insert into width_2 values(23);
还有个有趣的现象,在实际建表是,只是加了zerofill参数而没有加unsigned,但最后实际情况却被默认的加上了unsigned,看来这是MySQL的一个自动处理过程,认为“使用了zerofill,就一定是unsigned”——好吧,“0”后面跟个“-”确实不太好看-_-。
INT(11)确实作用不大,但是还是有指导意义,从网上获知:当列的实际内容超过指定的宽度时,如果MySQL使用这一列为某些复杂的JOIN生成临时表,可能会出问题——具体什么问题也没说明——因此,尽量设置合适、够用的WIDTH。