前言:
目前同学们对“mysqlint占用多少个字节”大概比较着重,你们都想要了解一些“mysqlint占用多少个字节”的相关文章。那么小编在网络上网罗了一些有关“mysqlint占用多少个字节””的相关资讯,希望大家能喜欢,兄弟们一起来学习一下吧!在 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个字节的数据。
标签: #mysqlint占用多少个字节