在mysql数据库中,填完字段名、数据类型之后就要填写长度,就好比int(4) varchar(16)这里的4和16 ,这个M代表什么意思呢?varchar类型的没什么异议,但是这个INT的呢?第一感觉就是代表长度,我只能存储4个数字以内的,可我存超过4位的数字的时候依然是可以存的,所以这样的理解是不完全对的。
其实这个M跟INT能表示的范围没有关系,只要你选择了INT,INT是用4个字节表示,1个字节8位,若表示无符号数时可以表示的范围是 0 ------- 232-1 ,你可以存储任何在这个范围内的数字。但也不是说跟表示完全没关系,mysql中有个zerofll,当建表时选择了0填充之后存储就会有很大的不同,这时如果你选择的是int(4) 你存储12则数据库中存储的是0012,如果填写12345,此时超过了他的指定宽度则按原样存储。
例如:
//创建一个表
mysql> create table length_test(id int(4) zerofill,name varchar(16));
Query OK, 0 rows affected (0.06 sec)
//插入一行数据
mysql> insert into length_test values (12,'suchshow');
Query OK, 1 row affected (0.05 sec)
//查询看看
mysql> select * from length_test;
+------+----------+
| id | name |
+------+----------+
| 0012 | suchshow |
+------+----------+
1 row in set (0.00 sec)
//再插入一行数据
mysql> insert into length_test values (12345,'suchshow');
Query OK, 1 row affected (0.03 sec)
//显示结果
mysql> select * from length_test;
+-------+----------+
| id | name |
+-------+----------+
| 0012 | suchshow |
| 12345 | suchshow |
+-------+----------+
2 rows in set (0.00 sec)
所以说后面的M跟表示的范围是没有影响的,只不过表示显示的宽度,搞懂了之后还是挺有用的。
其中常用的数字型所占用的字节数如下,根据字节数即可算出表示的范围了
日期和时间类型
列类型 需要的存储量
串类型
列类型 需要的存储量