博客
关于我
Mysql tinyint(1)与tinyint(4)的区别
阅读量:799 次
发布时间:2023-02-10

本文共 2008 字,大约阅读时间需要 6 分钟。

Mysql tinyint(1) 与 tinyint(4) 的区别

引言

在讨论MySQL数据库中数值类型时,tinyint(1) 和 tinyint(4) 这两个类型经常被提及。很多人对它们的区别并不清楚,因此本篇文章将从基础概念出发,深入分析两者的不同点。

什么是 tinyint(M)?

MySQL 中的数值类型中,tinyint(M) 并非仅限于整数类型。实际上,M 在这里并非表示最大值,而是字段的显示宽度。与字符串类型 varchar(M) 不同,数值类型的长度修饰符仅影响显示格式,而不影响存储空间。

数值类型的范围

对于 signed(有符号)类型,范围为:-128 到 127。

对于 unsigned(无符号)类型,范围为:0 到 255。
默认显示宽度分别为 4 和 3 个字符。

字段占用空间

无论是 tinyint(1) 还是 tinyint(4),它们都只占用 1 个字节(8 位)。因此,它们的存储空间是相同的。

区别

虽然它们的存储空间和数值范围相同,但在以下几个方面有所不同:

  • 显示宽度

    • tinyint(1) 的默认显示宽度为 4 个字符。
    • tinyint(4) 的默认显示宽度为 3 个字符。
  • 符号属性

    • tinyint(1) 默认是 signed(有符号),默认值范围为 -128 到 127。
    • tinyint(4) 如果未指定符号,默认也是 signed(有符号)。
  • zerofill 的影响

    当启用 zerofill 时:

    • 对于 tinyint(1),即使数值为 0,默认显示为 0000。
    • 对于 tinyint(4),默认显示为 0000。

    值得注意的是,zerofill 的作用是补零以达到指定的显示长度。如果你的数据格式要求一致,zerofill 可以帮助生成统一长度的数据(如流水号等)。

  • 测试

    为了更直观地展示两者的差异,我们可以通过以下 SQL 语句进行测试:

    CREATE TABLE `pre_demo` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',  `unsigned_t` tinyint(3) unsigned zerofill NOT NULL DEFAULT '000',  `signed_t` tinyint(4) unsigned zerofill NOT NULL DEFAULT '0000',  `t1` tinyint(1) unsigned zerofill NOT NULL DEFAULT '0',  `t2` tinyint(2) unsigned zerofill NOT NULL DEFAULT '00',  `t3` tinyint(3) unsigned zerofill NOT NULL DEFAULT '000',  `t4` tinyint(4) unsigned zerofill NOT NULL DEFAULT '0000',  `t5` tinyint(5) unsigned zerofill NOT NULL DEFAULT '00000',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;INSERT INTO pre_demo VALUES(NULL,8,8,8,8,8,8,8);INSERT INTO pre_demo VALUES(NULL,123,123,123,123,123,123,123);SELECT * FROM pre_demo;

    测试结果

    运行上述 SQL 语句后,表中数据如下:

    id unsigned_t signed_t t1 t2 t3 t4 t5
    1 008 0008 8 08 008 0008 00008
    2 123 0123 123 123 123 0123 00123

    通过测试可以看出:

    • 显示宽度:tinyint(1) 的显示宽度更长(4 个字符),默认值 0 会显示为 0000;tinyint(4) 的显示宽度为 3 个字符,默认值 0 会显示为 0000
    • 符号属性:两者在符号属性上无明显差异,因为它们都是 unsigned(无符号)。

    总结

    虽然MySQL 的 tinyint(1) 和 tinyint(4) 在存储空间和数值范围上相同,但它们的显示宽度和符号属性有所不同。此外,结合 zerofill 可以实现统一数据长度的显示,但大多数情况下,默认设置无需过多调整。

    如果你需要生成统一长度的数据(如流水号),则可以考虑使用 zerofill。然而,在日常开发中,默认使用 MySQL 提供的 tinyint(4) 已经足够满足大部分需求。

    转载地址:http://rrffk.baihongyu.com/

    你可能感兴趣的文章
    mysql中json_extract的使用方法
    查看>>
    mysql中kill掉所有锁表的进程
    查看>>
    mysql中like % %模糊查询
    查看>>
    MySql中mvcc学习记录
    查看>>
    mysql中null和空字符串的区别与问题!
    查看>>
    MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
    查看>>
    MYSQL中TINYINT的取值范围
    查看>>
    MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
    查看>>
    Mysql中varchar类型数字排序不对踩坑记录
    查看>>
    MySQL中一条SQL语句到底是如何执行的呢?
    查看>>
    MySQL中你必须知道的10件事,1.5万字!
    查看>>
    MySQL中使用IN()查询到底走不走索引?
    查看>>
    Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
    查看>>
    MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
    查看>>
    mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
    查看>>
    mysql中出现Unit mysql.service could not be found 的解决方法
    查看>>
    mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
    查看>>
    Mysql中各类锁的机制图文详细解析(全)
    查看>>
    MySQL中地理位置数据扩展geometry的使用心得
    查看>>
    Mysql中存储引擎简介、修改、查询、选择
    查看>>