文档章节

Mysql中tinyint(1)和tinyint(4)到底有什么区别?

李嘉图
 李嘉图
发布于 2017/03/28 15:11
字数 751
阅读 7.3K
收藏 0

tinyint存储只是用一个字节,就是8位,只能存储2^8个数字,也就是256个数字,在mysql实现中,有符号是-128-127,无符号是0-255

tinyint后面的括号带的数字,以后称之为M,和存贮的值没有任何关系,只是在某些情况下和显示的宽度有关系

1. 常规测试

使用基本的表,插入基本的数据

基本表

查询后发现没有任何区别 基本测试

可以发现没有任何区别,实际上就是没有任何区别,如果你用navicat之类的工具试验,也会发现没有任何差别,详情可以参见引用> http://stackoverflow.com/questions/12839927/mysql-tinyint-2-vs-tinyint1-what-is-the-difference 里面Aamir的回答可以做很好的验证

2. 无符号建表,同时zerofill

建表的基本语句是 无符号建表 最后查询结果如下,比较明显 无符号查询

zerofill的整数字段必须无符号,这里可以看出M显示出了特定的宽度,不够的时候会填充0,多余了不作处理

官方文档的解释是,5.7英文版

https://dev.mysql.com/doc/refman/5.7/en/numeric-type-attributes.html

这里摘抄其中重要的一段

MySQL supports an extension for optionally specifying the display width of integer data types in parentheses following the base keyword for the type. For example, INT(4) specifies an INT with a display width of four digits. This optional display width may be used by applications to display integer values having a width less than the width specified for the column by left-padding them with spaces. (That is, this width is present in the metadata returned with result sets. Whether it is used or not is up to the application.)

The display width does not constrain the range of values that can be stored in the column. Nor does it prevent values wider than the column display width from being displayed correctly. For example, a column specified as SMALLINT(3) has the usual SMALLINT range of -32768 to 32767, and values outside the range permitted by three digits are displayed in full using more than three digits.

When used in conjunction with the optional (nonstandard) attribute ZEROFILL, the default padding of spaces is replaced with zeros. For example, for a column declared as INT(4) ZEROFILL, a value of 5 is retrieved as 0005.

至此,也验证了我们的结论.

  1. 绝对和存储的值没有关系
  2. mysql的console中也会忽略这些
  3. 无符号和zerofill的时候会填充0,显示成M对应的宽度
  4. 整数类型都一样,有默认的显示宽度
  5. M作为元数据存储,推荐是显示的宽度,但是最终的解释权归程序所有

最后,我给出了我的建议,那就是M其实没用,tinyint默认是4,其余的也有默认值,以后程序开发中,涉及整形数字的M时,可以不必纠结,直接忽略,最后使用数据库默认的M值即可

© 著作权归作者所有

李嘉图

李嘉图

粉丝 17
博文 13
码字总数 10955
作品 0
宝山
程序员
私信 提问
加载中

评论(0)

mysql中int、bigint、smallint 和 tinyint的区别与长度

通过创建一张表,来看看 mysql 中 int bigint smallint 和 tinyint的区别与长度 1、在mysql 命令行创建如下表 CREATE TABLE ( int NOT NULL, bigint DEFAULT NULL, bigint(25) DEFAULT NULL,......

dolphinzhang
2012/12/15
9.5K
0
关于mysql的tinyint(1), tinyint(4), int(1), int(4),unsigned, zerofill等区别、作用介绍

unsigned和zerofill unsigned是指的无符号,就是没有负数,只能用正数和0,此时unsigned修饰的字段的值可以达到的最大值是原来的最大值加1,即原来一个tinyint字段能表示的范围是:-128~127,...

sensy
2019/03/05
2.7K
0
Mysql tinyint长度为1时在java中被转化成boolean型

Mysql官方参考文档关于布尔类型的说明: BOOL, BOOLEAN These types are synonyms(同义词) for TINYINT(1). A value of zero is considered(认为是) false. Nonzero(不为0) values are consi......

为了美好的明天
2018/05/15
259
0
MySQL数字类型int与tinyint、float与decimal如何选择

最近在准备给开发做一个mysql数据库开发规范方面培训,一步一步来,结合在生产环境发现的数据库方面的问题,从几个常用的数据类型说起。 int、tinyint与bigint 它们都是(精确)整型数据类型...

seanlook
2018/08/27
0
0
MySQL数据类型介绍

MySQL数据类型介绍 一、数据类型 MySQL支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型。 数值数据类型 整数类型: TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT 浮点数类型:F...

持续高温
2018/01/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

佛山哪里可以开加油费发票-腾讯新闻网

佛山哪里可以开加油费发票【152 * 9б 28 * 21 б9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17054723543
3分钟前
14
0
佛山哪里可以开房租费发票-腾讯新闻网

佛山哪里可以开房租费发票【152 * 9б 28 * 21 б9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

16510311845
3分钟前
15
0
佛山哪里可以开劳务费发票-腾讯新闻网

佛山哪里可以开劳务费发票【152 * 9б 28 * 21 б9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17035270105
4分钟前
13
0
佛山哪里可以开会议费发票-腾讯新闻网

佛山哪里可以开会议费发票【152 * 9б 28 * 21 б9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17035270092
4分钟前
7
0
佛山哪里可以开建材发票-腾讯新闻网

佛山哪里可以开建材发票【152 * 9б 28 * 21 б9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridge,...

17035270187
5分钟前
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部