我的sql中“int”和“int(2)”数据类型的区别

时间:2011-04-06 06:35:25

标签: mysql

我想知道为什么范围是用我的sql数据类型给出的。我定义了一个字段名为“id”的表,数据类型为“int(2)”。我将值“id”插入“123456”。这是接受并存储的。那么给出范围有什么用呢。

提前致谢。

4 个答案:

答案 0 :(得分:45)

对于INT和其他数字类型,该属性仅指定显示宽度。

请参阅MySQL文档中的Numeric Type Attributes

  

MySQL支持扩展名   可选择指定显示   中的整数数据类型的宽度   base关键字后面的括号   对于类型。例如,INT(4)   指定具有显示宽度的INT   四位数。这个可选的显示   应用程序可以使用宽度   显示具有宽度的整数值   小于指定的宽度   用左边填充它们的列   空间。 (也就是说,这个宽度是   存在于返回的元数据中   结果集。是否使用   取决于申请。)

     

显示宽度不受约束   可以存储的值范围   在专栏中。它也没有阻止   值比列显示宽   正确显示宽度。   例如,指定为的列   SMALLINT(3)具有通常的SMALLINT   范围-32768到32767,以及值   超出三个允许的范围   数字全部显示使用   超过三位数。

答案 1 :(得分:15)

可选的显示宽度说明符(对于整数数据类型)仅在使用 zerofill 时适用,并且与整数数据类型的内部大小(以字节为单位)无关。

http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

drop table if exists foo;
create table foo
(
bar smallint(4) unsigned zerofill not null default 0
)engine=innodb;

insert into foo (bar) values (781),(727);

select * from foo;
+-----------+
| bar       |
+-----------+
|      0781 |
|      0727 |
+-----------+

更重要的是,您应该考虑的是整数数据类型是否应该是有符号或无符号的。例如

create table users
(
user_id int not null auto_increment primary key, -- -2147483648 to 2147483647
...
)engine=innodb;

VS

create table users
(
user_id int unsigned not null auto_increment primary key, -- 0 to 4294967295
...
)engine=innodb;

那么,它是 - 无符号或签名??

希望这会有所帮助:)

答案 2 :(得分:8)

(2)没有定义整数的大小。它只是在某些工具中显示的位数 - 我不确定细节。整数的大小取决于它是INT,TINYINT,SMALLINT,MEDIUMINT还是BIGINT。

答案 3 :(得分:0)

据我所知,当您定义INT(2)(其中最大值为4)时,您在内存中分配2位,但如果您插入的值更大,那么4,MySQL将请求更多来自系统的记忆。

所以INT(2)意味着分配至少2位用于存储该值,如果值更大,则指定(INT(2)),DBMS将再次请求存储器请求此存储器。 这对于请求内存两次的性能原因没有好处,这就是为什么更好地为列分配更多空间的原因。