美文网首页
MySQL中整型M-unsigned-zerofill的区别与意

MySQL中整型M-unsigned-zerofill的区别与意

作者: djz0306 | 来源:发表于2019-06-18 21:26 被阅读0次

    因为涉及到数据类型和范围,所以本篇新建一个表,表结构如下:

    含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均类似上面的例子,只是范围不一样

    相关文章

      网友评论

          本文标题:MySQL中整型M-unsigned-zerofill的区别与意

          本文链接:https://www.haomeiwen.com/subject/bgnqqctx.html