mysql zerofill设置方法_mysql之zerofill

本文解析了MySQL中整形字段使用unsigned的意义及其带来的数据范围变化,并详细对比了tinyint(1)与tinyint(7)的区别,重点讲解zerofill属性的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相信很多用了mysql的人都很迷茫

1.对于整形的字段用了unsigned有什么区别?

2.tinyint(1) 和 tinyint(7) 究竟有什么区别?

下面来简单分析一下:

1、对于每种整形来说,都分无符号(unsigned)和有符号(signed)两种类型,如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的数据,比如16位系统中一个int能存储的数据的范围为–32768 ~ 32767(16位2进制的最高位作为符号位‘1’为负‘0’为正),而unsigned能存储的数据范围则是0~65535(这个最高位不用做符号位,所以是2的16次方,一共65536)。

由于在计算机中,整数是以补码形式存放的。根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数。同时在相同位数的情况下,所能表达的整数范围变大。

下面提供一下MYSQL中各种类型的整形的存储范围

0818b9ca8b590ca3270a3433284dd417.png

2、说到tinyint(1)和 tinyint(7)的区别,就不能不提mysql的整形的一个特性,zerofill,即是否在位数不足的时候,左补0。

明白这个定义之后,其实就是非常清楚了,1也好,7也好,只是和zerofill结合起来使用,用来标识存储的值在不满足多少位的情况下左补0

看例子 :

先建一张测试表test1

CREATE TABLE IF NOT EXISTS `test1` (

`t1` int(5) unsigned NOT NULL,

`t2` int(11) unsigned zerofill NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE = utf8_unicode_ci;

INSERT INTO `test1` (`t1`, `t2`) VALUES

(111, 111111),

(111111,1111);看一下最终的数据显示:

0818b9ca8b590ca3270a3433284dd417.png

真相都在图中了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值