intp的n指的是什么(你真的了解intn当中n的含义吗)
intp的n指的是什么(你真的了解intn当中n的含义吗)INSERT INTO `test`(`age` `age1` `name` `name1`) VALUES (123456 123456 'ganhu' 'ganhuojun');执行结果如下,发现竟然成功了,说明与varchar(n)含义不一样,并非限制数据长度。那int(n)当中的n会不会和varchar(n)含义一样,下面将age字段输入123456来执行一下:INSERT INTO `test`(`age` `age1` `name` `name1`) VALUES (12345 12345 'ganhu' 'ganhuojun');运行结果如下,说明降低了 name 字段的长度到5是可以成功存储的Affected rows: 1 Time: 0.001000s验证了varchar(n)中的
在 mysql 数据库的使用中,我们常常指定数据库表的字段的类型为整型int和可变字符串varchar,如下面一段 ddl (Data Definition Language)语法:
CREATE TABLE `test` (
`id` bigint NOT NULL AUTO_INCREMENT
`age` int(5) DEFAULT NULL
`age1` int DEFAULT NULL
`name` varchar(5) DEFAULT NULL
`name1` varchar(10) DEFAULT NULL
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
varchar(n)
针对varchar(n)很多人都知道,n是指字符串长度,我们先实验一下:
INSERT INTO `test`(`age` `age1` `name` `name1`) VALUES (12345 12345 'ganhuojun' 'ganhuojun');
运行结果如下:
1406 - Data too long for column 'name' at row 1 Time: 0.001000s
可见数据长度过大,varchar(5)只能允许5个字符长度,修改下 sql 语句:
INSERT INTO `test`(`age` `age1` `name` `name1`) VALUES (12345 12345 'ganhu' 'ganhuojun');
运行结果如下,说明降低了 name 字段的长度到5是可以成功存储的
Affected rows: 1 Time: 0.001000s
验证了varchar(n)中的n确实是指字符串长度
int(n)在mysql数据库中,int占四个字节,一个字节 8 位,也就是 4 * 8 = 32,即2^32个数字。
那int(n)当中的n会不会和varchar(n)含义一样,下面将age字段输入123456来执行一下:
INSERT INTO `test`(`age` `age1` `name` `name1`) VALUES (123456 123456 'ganhu' 'ganhuojun');
执行结果如下,发现竟然成功了,说明与varchar(n)含义不一样,并非限制数据长度。
Affected rows: 1 Time: 0.001000s
那么这个int(n)中的n到底是什么含义呢?
int(n) 中的n其实是指最大显示宽度,最大有效显示宽度是 255,且显示宽度与存储大小或类型包含的值的范围无关。
下面我们来验证一下,为了直观显示,使用ZEROFILL关键字,ZEROFILL的作用是插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的0,重新定义一张表:
CREATE TABLE `test1` (
`id` bigint NOT NULL AUTO_INCREMENT
`age` int(5) ZEROFILL DEFAULT NULL
`age1` int ZEROFILL DEFAULT NULL
`name` varchar(5) DEFAULT NULL
`name1` varchar(10) DEFAULT NULL
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
此时,我们插入2组数据对比下结果:
INSERT INTO `test1`(`age` `age1` `name` `name1`) VALUES (1 123456 'ganhu' 'ganhuojun');
INSERT INTO `test1`(`age` `age1` `name` `name1`) VALUES (123456 123456 'ganhu' 'ganhuojun');
执行后结果如下图,看到1由于只有1个宽度,前面补充来4个0,达到了5位,而123456已经是6位了,显示正常。
此处验证了插入数据宽度小于定义n时,前面会用0补全,当超过定义的宽度n时,也能正常显示;注意int(n)并不会限制实际int的存储大小,依旧可以存4个字节的数据。