引言

借由本篇文章来探讨下在Mysql数据库中数值类型tinyint(1)tinyint(4) 有啥区别呢?

什么是tinyint(M)?

先来了解下mysql中字符串类型varchar(M) 和数值类型tinyint(M) 的区别?
字符串列类型varchar(M) 而言,M 是字段中可以存储的最大字符长度,也就是说是字段长度。根据设置,当你插入超出字段长度的数据时,你很可能会收到错误提示,即使没有收到错误提示,你插入的数据也会被自动截断以适应该字段的预定义长度。所以,varchar(20) 和 varchar(40) 是不同的,其真实反映了该字段可以存储的数据长度
数值列类型:其长度修饰符表示最大显示宽度,与该字段物理存储没有任何关系。也就是说,tinyint(1) 和 tinyint(4) 能够存储的数值范围都是-128…127 (or for unsigned values 0…255),他们是相同的数据类型,当然他们还是有一点差异,以下会有说明。
对于 tinyint 数据类型,只占 1 个字节

- 无符号的(unsigned),范围是 0 到 255,默认长度是 3。
- 有符号的(signed),范围是 -128 到 127,默认长度是 4。

范围算法:tinyint占1个字节,一个字节 8 位,也就是1*8=8,可以表示的数字个数是 2的 8 次方(2^8 = 256个数字)。

区别:若使用了 zerofill,当实际长度达不到指定的显示长度时,就会用 0 在前面补齐。(简记zerofill作用就是补零)

测试

先创建一张测试表,对 tinyint 类型都使用 zerofill。

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;

然后,插入测试数据。

NSERT 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);

最后,查询数据表中的数据。

mysql> SELECT * FROM pre_demo;
+----+------------+----------+-----+-----+-----+------+-------+
| 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 |
+----+------------+----------+-----+-----+-----+------+-------+
2 rows in set (0.00 sec)
mysql> SELECT *,LENGTH(id),LENGTH(unsigned_t),LENGTH(t1) FROM pre_demo;
+----+------------+----------+-----+-----+-----+------+-------+------------+--------------------+------------+
| id | unsigned_t | signed_t | t1  | t2  | t3  | t4   | t5    | LENGTH(id) | LENGTH(unsigned_t) | LENGTH(t1) |
+----+------------+----------+-----+-----+-----+------+-------+------------+--------------------+------------+
|  1 |        008 |     0008 |   8 |  08 | 008 | 0008 | 00008 |          1 |                  3 |          1 |
|  2 |        123 |     0123 | 123 | 123 | 123 | 0123 | 00123 |          1 |                  3 |          3 |
+----+------------+----------+-----+-----+-----+------+-------+------------+--------------------+------------+
2 rows in set (0.00 sec)

总结

  • tinyint(1)tinyint(4) 能够存储的数据范围是一样的,都是 0 到 255(无符号的)。区别在于,当使用 zerofill 时,查询结果显示的长度可能不同。
  • zerofill 和 指定长度配合使用,可用于统一数据的显示长度,比如在数据库层面快速生成统一长度的流水号。
  • 一般情况下,无须刻意指定整型数据类型的长度。使用 MySQL 的默认长度tinyint(4) 即可。

参考文献

http://blog.darkmi.com/2016/06/24/3110.html
https://blog.csdn.net/lamp_yang_3533/article/details/100061678

Mysql tinyint(1)与tinyint(4)的区别相关推荐

  1. 理解误区——mysql中tinyint与Java的数据类型的对应关系;tinyint(1) 与tinyint(4)的区别

    理解误区1    在最初学习Java和MySQL的时,一直使用的是Boolean来接受tinyint类型的数据.具体操作:在数据库中设置TINYINT(1),存储0和1:在Java中使用boolean ...

  2. tinyint(1)与tinyint(3),int(1)与int(3),tiny(1)与int(1)区别

    tinyint一个字节   smallint  两个字节   MEDIUMINT三个字节   int四个字节 不管 tinyint 后面的数字是多少,它存储长度=2^(1字节)=2^8,即存储范围是 ...

  3. 关于 MySQL 的 boolean 和 tinyint(1)

    boolean类型 MYSQL保存BOOLEAN值时用1代表TRUE,0代表FALSE,boolean在MySQL里的类型为tinyint(1), MySQL里有四个常量:true,false,TRU ...

  4. mysql boolean 和bool_关于 MySQL 的 boolean 和 tinyint(1)

    boolean类型 MYSQL保存BOOLEAN值时用1代表TRUE,0代表FALSE,boolean在MySQL里的类型为tinyint(1), MySQL里有四个常量:true,false,TRU ...

  5. mysql中整数数据类型tinyint详解

    文章来源: 学习通http://www.bdgxy.com/ 目录 1.1tinyint类型说明 1.2实践环境说明 1.3加unsigned属性 1.3.1SQL模式开启严格模式 1.3.2SQL模 ...

  6. tinyint(1)和tinyint(4)的区别和用法

    1 bytes = 8 bit ,一个字节最多可以代表的数据长度是2的8次方 11111111 在计算机中也就是 -128到127 1.BIT[M] 位字段类型,M表示每个值的位数,范围从1到64,如 ...

  7. mysql int(3)与int(11)的区别详解

    这篇文章主要介绍了mysql int(3)与int(11)的区别详解的相关资料,需要的朋友可以参考下 mysql int(3)与int(11)的区别 总结,int(M) zerofill,加上zero ...

  8. mysql的binary、char、varchar区别

    mysql的binary.char.varchar区别 分类: Mysql/postgreSQL 2013-09-24 18:11:46 char使用固定长度的空间进行存储,char(4)存储4个字符 ...

  9. MySQL存储引擎中MyISAM和InnoDB区别

    转载自  MySQL存储引擎中MyISAM和InnoDB区别 MyISAM 和InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应 ...

最新文章

  1. DBUtils的使用之增删改的操作
  2. python入门教程2word-入门干货:Python操作Word文件经验分享
  3. JNI中java类型的简写
  4. jenkins产生503错误的解决方法
  5. Duilib vlc c++ 字符编码
  6. 徐波 博士 计算机,徐波教授:医工联合促进智能肿瘤学发展——探秘肿瘤精准治疗中的AI技术...
  7. VS2019注释整段代码
  8. 调用IOS邮件系统发送邮件
  9. 小程序开发初体验,从静态demo到接入Bmob数据库完全实现
  10. LeetCode 222. 完全二叉树的节点个数(递归)
  11. 4月28日上午学习日志
  12. YALMIP工具箱之解决半定规划问题的SDPT3求解器安装
  13. 用QQ邮箱接收网易163企业邮箱的邮件
  14. 信用卡评分模型(R语言)
  15. C语言中puts跟printf的区别
  16. 软考一些可能有用的链接
  17. 使用HorizontalListView仿车来了公交时刻表
  18. 【硬见小百科】高速PCB设计中的阻抗匹配
  19. 大学生python期末解答题_大学mooc2020年用Python玩转数据期末考试大全答案
  20. 【rpc】超详细介绍

热门文章

  1. 有限体积法(5)——对流-扩散方程的离散
  2. matlab Logistic回归模型
  3. 同步系统时间与硬件时钟
  4. java 向word中添加excel附件并向excel单元格中加入图片并压缩图片并根据图片动态控制单元格高度宽度
  5. 常见的关系型数据库和非关系型数据及其区别
  6. 多开游戏用虚拟机还是服务器,(虚拟机游戏多开的最好选择多开本人的方法.ppt...
  7. 华中科技大学计算机网络教材,华中科技大学计算机网络复习资料.ppt
  8. matlab通过数据进行曲线拟合 导出公式
  9. 看完Alibaba“Java成长笔记”我懂了! 为什么阿里的程序员成长如此之快?
  10. C#不四舍五入保留两位小数