因为涉及到数据类型和范围,所以本篇新建一个表,表结构如下:
含tinyint型数据的表结构.jpg该表中含有 tinyint 型数据,按照上一篇说的 tinyint 型的有符号范围是-128-127。那么先插入一个在此范围内的数,例如24。顺便回顾一下插入的语句:
insert into stu (sname ,age) values ("佟湘玉" ,24);
结果如下:
向有符号 tinyint 型中插入范围内的数.jpg返回正确的结果。如果向其中插入一个大于127的数呢?按照测试的思维,试一试边界值128
insert into stu (sname ,age) values ("缺德道人" ,128);
向有符号 tinyint 型中插128.jpg
可以看到插入的时候有一个 warning ,查看数据发现 age 变成了127。在新版中超过范围的值都会被缩到127,老版中会报错 “ Out of range value”
同样的,边界的各个值进行插入:
有符号tinyint 型范围边界测试.jpg只要是在 -128 - 127 之间都可以正常插入,如果是大于127就会取127,如果小于-128就会取-128。可以继续测试其他特殊值,例如0能够正常插入,255插入后变为127。
unsigned
在原来的表基础上增加一个 IQ 列,为无符号 unsigned:
alter table stu add IQ tinyint unsigned not null default 0;
如下所示:
增加unsigned tinyint类型列.jpg如果往 IQ 列中插入负数,例如-1:
insert into stu (sname ,age ,IQ) values ("燕小六", 25, -1);
结果如下:
向unsigned tinyint中插入负数.jpg类似的,-1被变成了0(不是默认值原因,默认值为其他值也会保存成0)。同样的向其中插入一些边界数据,可以看到:
unsigned tinyint 型边界测试.jpg大于255以后就会保存255,小于0以后就会保存0,范围为:0-255
zerofill与M参数
向原来的表中插入新的编号 snum 列:
alter table stu add snum smallint(5) zerofill not null default 0;
插入后如下所示:
增加 zerofill smallint 型列.jpg其中 snum 默认就为 unsigned 类型,这是因为使用了 zerofill 默认为 unsigned 类型
向其中插入一行数据:
insert into stu (sname ,age ,IQ ,snum) values ("李大嘴" ,30 ,95 ,5);
结果如下所示:
插入编号为5的数据.jpg可以看到5前面填充了0,而宽度为5。zerofill 表示补充0,M表示补充以后的宽度,单独使用M没有意义
其他例如bigint均类似上面的例子,只是范围不一样
网友评论