Mysql数据类型之zerofill

一直被误导

从去年开始用Mysql,然后经常看到建表类似语句


当时不明所以,以为是数据类型对应的存储最大长度,比如tinyint(1),就只能存储0,1,...9以内数字,11就不行;

所以人云亦云,在自己处理的时候,也这样设置了长度。

突然,有一天,想查一下(心血来潮),发现一直被误导了,被自己误导了。

真相

看一下mysql官网的数据类型定义


以tinyint为例,存储值在-128~127之间,非负时0-255。创建一个表

CREATE TABLE `test` (
  `id1` tinyint(2) DEFAULT NULL,
  `id2` int(4) unsigned DEFAULT NULL
) ENGINE=InnoDB;

现在插入2条数据

-- 十位数字,猜测能插入
INSERT INTO test VALUES(11,44);
-- 十位数字,猜测不能插入
INSERT INTO test VALUES(111,444);

结果,,都成功了,说明以前的猜测是错误的:tinyint(M)的M并不是代表存储的最大长度

为此,我们再次验证,将id1改成tinyint(1)

ALTER TABLE test MODIFY `id1` TINYINT(1);

再次插入


发现插入127成功,128失败,所以得出结论:TYPE(M)的M与存储并没有关系

那这个到底有什么用呢?

zerofill

wtf?TYPE(M)中的M在什么情况下用呢?zerofill:如果值长度不够,在前面补0表示。

还是以上面的表为例,id1改回为tinyint(2),插入新数据

ALTER TABLE test MODIFY `id1` TINYINT(2) ZEROFILL;
INSERT INTO test VALUES(1,4);

再查一下表数据:


发现并没有什么变化,so?别急,刚才是在window下,现在linux下查询试试


有了!可以再扩大tinyint(3),tinyint(4),可以看到相应的结果。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值