Mysql之 bigint(20)的含义

先看一下mysql几种int类型

https://dev.mysql.com/doc/refman/5.6/en/integer-types.html

http://cdn.telami.cn/Snipaste_2019-03-27_14-17-35.png

上图每种类型占用几个字节,数据范围多少,都一目了然。

那么mysql中整数类型后面的数字,是不是指定这个字段的长度?比如bigint(20),20代表20个字节吗?

为自己之前的不求甚解感到羞愧。。

这些类型,是定长的,其容量是不会随着后面的数字而变化的,比如int(11)和int(8),都是一样的占4字节。tinyint(1)和tinyint(10)也都占用一个字节。

那么后面的11和8,有啥用呢?

mysql数据库中 :数据类型(m)来约束数据,其中数字m在不同的数据类型中表示含义是不同的,这里只讲整数。

整型数系统已经限制了取值范围,tinyint占1个字节、int占4个字节。所以整型数后面的m不是表示的数据长度,而是表示数据在显示时显示的最小长度。 tinyint(1) 这里的1表示的是 最短显示一个字符。tinyint(2) 这里的2表示的是 最短显示两个字符。 当字符长度超过(m)时,相当于啥都没发生; 当字符长度小于(m)时,就需要指定拿某个字符来填充,比如zerofill(表示用0填充), 设置tinyint(2) zerofill 你插入1时他会显示01;设置tinyint(4) zerofill 你插入1时他会显示0001。 所以,没有zerofill,(m)就是无用的。

总结:bigint(10)和bigint(20)的区别在于如果表定义加上zerofill后在客户端显示长度不同:

1
2
3
4
5
6
7
8
MariaDB [test]> create table test2 (id bigint(10) zerofill, id1 bigint(20) zerofill);

MariaDB [test]> insert into test2 values(1,2);

MariaDB [test]> select * from test2;

id                   id1
0000000001 00000000000000000002

如果在创建bigint字段时,不指定长度,则默认长度为20:

1
2
3
4
5
6
7
8
9
mysql> create table test3 (id bigint);

Query OK, 0 rows affected

mysql> show create table test3;

Table Create Table

test3 CREATE TABLE `test3` (  `id` bigint(20) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8

http://cdn.telami.cn/QQ%E5%9B%BE%E7%89%8720190327144532.gif