Mysql中Unsigned和Zerofill数据型的使用

一、今天开同事在使用Mysql的时候,错误使用了Unsigned和Zerofill了,大概是不是蛮懂这两个使用场景吧。很多东西,细节都是很重要的,不能随便用的。
decimal是浮点型,使用Unsigned是错误的。

二、什么是unsigned
unsigned 既为非负数,用此类型可以增加数据长度!
例如如果 tinyint最大是127,那 tinyint unsigned 最大 就可以到 127 * 2

unsigned 属性只针对整型,而binary属性只用于char 和varchar。

三、整型和浮点型

复制代码
复制代码
类型  说明
tinyint 非常小的整数
smallint    较小整数
mediumint   中等大小整数
int 标准整数
bigint  较大整数
float   单精度浮点数
double  双精度浮点数
decimal 一个串的浮点数
复制代码

四、每种数值类型的名称和取值范围

复制代码
复制代码
类型说明    取值范围
tinyint[(m)]    有符号值:-128 到127(- 27 到27 – 1)无符号值:0到255(0 到28 – 1) 1个字节
smallint[(m)]   有符号值:-32768 到32767(- 215 到215 – 1)无符号值:0到65535(0 到21 61) 2个字节
mediumint[(m)]  有符号值:-8388608 到8388607(- 22 3 到22 31 )无符号值:0到16777215(0 到22 41) 3个字节
int[(m)]    有符号值:-2147683648 到2147683647(- 231 到231- 1)无符号值:0到4294967295(0 到232 – 1) 4个字节
bigint[(m)] 有符号值:-9223372036854775808 到9223373036854775807(- 263到263-1)无符号值:0到18446744073709551615(0到264 – 1) 8个字节
float[(m, d)]   最小非零值:±1.175494351e – 38
double[(m,d)]   最小非零值:±2.2250738585072014e – 308
decimal (m, d)  可变;其值的范围依赖于m 和d
复制代码

五、各种类型值所需的存储量如表

复制代码
复制代码
类型说明    存储需求
tinyint[(m)]    1字节
smallint[(m)]   2字节
mediumint[(m)]  3字节
int[(m)]    4字节
bigint[(m)] 8字节
float[(m, d)]   4字节
double[(m, d)]  8字节
decimal (m, d)  m字节(mysql < 3.23),m+2字节(mysql > 3.23
复制代码

六、数值列类型的存储需求
mysql提供了五种整型: tinyint、smallint、mediumint、int和bigint。int为integer的缩写。这些类型在可表示的取值范围上是不同的。 整数列可定义为unsigned从而禁用负值;这使列的取值范围为0以上。各种类型的存储量需求也是不同的。取值范围较大的类型所需的存储量较大。

mysql 提供三种浮点类型: float、double和decimal。与整型不同,浮点类型不能是unsigned的,其取值范围也与整型不同,这种不同不仅在于这些类型有最大 值,而且还有最小非零值。最小值提供了相应类型精度的一种度量,这对于记录科学数据来说是非常重要的(当然,也有负的最大和最小值)。

七、什么是Zerofill

整型字段有个ZEROFILL属性,在数字长度不够的数据前面填充0,以达到设定的长度。

八、Zerofill应用一
这种用法,可以大量用于所谓“流水号”的生成上。比如,想要生成日期_0x的流水号。可以直接拼接

复制代码
CREATE TABLE `staffs` (  
  `id` int(11) unsigned zerofill NOT NULL AUTO_INCREMENT,  
  `col2` varchar(20) NOT NUL,  
  PRIMARY KEY (`id`),  
) ENGINE=InnoDB;  

九、Zerofill应用二
比较常用的应该是月份或日期前补0,还是整形数字不是字符串。

复制代码
CREATE TABLE `t1` (  
  `year` year(4) DEFAULT NULL,  
  `month` int(2) unsigned zerofill DEFAULT NULL,  
  `day` int(2) unsigned zerofill DEFAULT NULL  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

结束、一些细节问题,还是非常重要的,不容小觑。

https://blog.csdn.net/wd2014610/article/details/80231639

posted @   牛奔  阅读(603)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示