msyql int(x)中x用法解析

发布时间:2020-04-13编辑:脚本学堂
本文介绍了mysql中int(x)类型字段定义的正确用法,对于数值类型只能在100内的字段忘记作校验就给插入数据库,测试时把一个千位数插入,竟然插入并且数据库中数据也正确。

有如下的mysqlbiaojiegou/ target=_blank class=infotextkey>mysql表结构:
 

CREATE TABLE `test` ( 
  `TYPEID` int(2)  
) ENGINE=myisam CHARSET=latin1; 

对于test表字段中的typeId 后面的 int(2)中的2代表的到底是什么含义。

可能会想到是varchar(2)后面的2代表为两个字节,也就不难把int后的2误认为2位即typeId的最大存入的数为99【俺以前也一直这么认为的】 。

对于数值类型只能在100内的字段忘记作校验就给插入数据库,测试时把一个千位数插入,竟然插入并且数据库中数据也正确。
第一反应是测试服务器的表创建错误,检查一遍没有啊。回到本地也测试了下发现也存在这个问题。

对于mysql的int来说它的长度是不变的及为4个字节、对于插入数据数据大小也是不变的。

带符号的数值大小范围为:-2147483648 到214748347

无符号的:0到4294967295
int(x)的x并不能改变int类型字段存入数据值的大小【即不能限制数值的范围】

例子,int(2)能存入214748347。
int(1)也能存入214748347。
使用test表:
insert into test value( 214748347 
); 

发现能插入,整个过程如下:
mysql int(x)字段类型

int(2)能插入214748347。
那int(x)的x到底是什么,x为期望显示数据的列宽。
期望列宽干什么用,这个是和mysql的另外的关键字zerofill一起使用
 zerofill 含义代表为未到达宽度x的前填充0【或称为0补位】,超出x代表宽度的数值按原样显示。
备注:zerofill自动将int标示为无符号的类型
无该关键代表不填充,按原值显示。

例子,
 

复制代码 代码示例:
create table `tzfill` ( 
  `typeid` int(4) zerofill  
) engine=myisam charset=latin1; 
insert into tzfill value( 12 ); 
insert into tzfill value(  558585 ); 
select * from tZfill; 

mysql中的TINYINT、SMALLINT等数据类型都是这样表示。
1)、可以看出mysql对于数值类型来说不管是多大的数它的存储大小没有改变【该占几个字节还是占几个字节,不因期望存储宽度即x而改变】,所以开发时选择合适的数值类型能用小的存储位数的就用小的。

2)、对于数字类型该校验的还是要校验,否则容易出现此类问题.