在设计数据库表字段的过程中,会遇到诸如“int(255)”、"varchar(255)"之类的问题,那么这个长度代表什么呢?
CREATE TABLE `tt` (
`a` int(2) DEFAULT NULL,
`b` varchar(2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
首先建立一张表,SQL语句如上。然后通过Navicat工具向表中添加数据。
可以看到,正常添加数据是可以的。接下来试一下比较“异常”的数据,
可以看到,在操作时候,a的值333被添加进去了;而varchar类型的b,只能添加两个字符,再尝试多一个字符,Navicat禁止了输入。那么使用SQL语句还原一下这个操作,看看报什么错:
insert into tt(a,b) values(555,'555');
执行这个SQL语句,提示b列过长。
从上面试验的结果可以看出,对于int类型,它的长度不是代表有几个数字(3-长度为1,33-长度为2,);而对于varchar类型,它的长度表示最大存储的字符数。
那么int类型的这个长度,表示什么呢,经过一番查阅,这里的长度叫做“显示宽度”。
显示宽度其实就是显示的时候,看到的最少数字个数。这里注意,显示宽度不会对原本的值进行改变,只是在显示时候改变样式。
比如 int(2) ,表示不管你的数值是多少,最少可以看到两个数字。假如你存的数值的9,没有满两位,就会在前面补零。假如你的数值是120,超过了显示宽度,则直接显示原始值,不做补零操作。这里的补零操作需要依赖一个关键字ZEROFILL。
执行如下SQL语句建立一个表,
CREATE TABLE `xx` (
`a` int(2) ZEROFILL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
使用Navicat在表中添加数据1,按照上面介绍,应当展示01才对,但这里仅仅展示了一个1,原因是Navicat做了优化,使用命令行查看,
总结一下上面的,
-
显示宽度只适应于Mysql的数值类型
-
显示宽度和数值类型的取值范围是无关的。
例如int(10) 他的取值范围任然是(-2 147 483 648,2 147 483 647) -
显示宽度只是指明MYSQL数值类型最少显示的数字个数。
当数值的位数小于显示宽度时会有空格或零填充,当数值的位数大于显示宽度时,直接显示该数值 -
显示宽度的效果(插零)需要配合zerofill使用
-
varchar类型的长度是真正表示存储的字符数的