MySQL学习(一)

来源:互联网 发布:python 数据采集 编辑:程序博客网 时间:2024/06/05 18:53

在创建表时,经常会遇到 int(11) varchar(100)等这个的考虑。也容易误解为存放的长度等。

在mysql中,int(M) 中的M其实表示的是最大显示宽度
bigint:
为8个字节,所以可以存放:-2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字);

int:

smallint:
为2个字节,存放 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整型数据;

tinyint:
为1个字节,存放从 0 到 255 的整型数据。

所以,int(1)与int(11)在存放字节上是一致的。M的设置表示显示的。但是要设置一个参数:如果列制定了zerofill 就会用0填充显示,int(4)指定后就会显示为0002,即会自动以0补全位数。

不过要注意的是:M在varchar和char中,并不是表示显示宽度
varchar(100)和varchar(200)表示的含义是一个可以最大存放100个字符,一个可以最大存放200个字符

在深入的了解下。如果varchar(100) 和varchar(200)存放 5个字符,则他们在实际存储中也同样只是占用了5个字符的空间。
即:对于VARCHAR数据类型来说,硬盘上的存储空间虽然都是根据实际字符长度来分配存储空间的。但是对于内存来说,则不是。其时使用固定大小的内存块来保存值。简单的说,就是使用字符类型中定义的长度,即200个字符空间。显然,这对于排序或者临时表(这些内容都需要通过内存来实现)作业会产生比较大的不利影响。所以在实际应用中,还是要尽量考虑长度的,而不是笼统用个最大值。

那对于char和varchar来说,char在存储时是固定长度的,而varchar是变动的。char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节)。

原创粉丝点击