精华内容
下载资源
问答
  • Mysql tinyint(1)与tinyint(4)的区别
    2021-03-31 10:17:02

    引言

    借由本篇文章来探讨下在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

    更多相关内容
  • 对于该问题,通过几个问题来解决自己的疑问: ### 1. tinyint类型的含义,实际作用解释

    对于该问题,通过几个问题来解决自己的疑问:

    1. tinyint类型的含义,实际作用解释

    tinyint(M)指的是占据1字节的整型变量类型,每个类型的值所代表的含义,如下图所示:
    在这里插入图片描述

    2. tinyint(M) 中M岁代表的含义

    错误的理解:

    • tinyint(M) 这里的M代表的并不是存储在数据库中的具体的长度,会有人误以为int(3)只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是错误的。

    正确的解释:

    • tinyint(M)只有该字段指定zerofill属性时有用,zerofill的含义是自动填充0,如tinyint(4),如果实际值是2,如果列指定了zerofill,查询结果就是0002,左边用0来填充。
    • 当tinyint(M)未指定zerofill,那么括号里的数就无意义
    展开全文
  • Mysql中tinyint(1)与tinyint(4)的区别

    千次阅读 2022-01-23 17:46:19
    1varchar(M)和数值类型tinyint(M)的区别 字符串类型:varchar(M)而言,M是字段中可以存储的最大字符串...数值列类型:其长度修饰符表示最大宽度,与该字段物理存储没有任何关系,也就是说,tinyint(1)和tinyint(4...

    varchar(M)和数值类型tinyint(M) 的区别

            字符串类型:varchar(M)而言,M是字段中可以存储的最大字符串,也就是说字段长度。根据设置,当你插入的数值超过字段设置的长度时,很有可能会收到错误提示,如果没有收到提示,插入的数据也有可能被自动的截断以适应该字段的预定义长度。所有像varchar(5)表示其存储的字符串长度不能超过5。

            数值列类型:其长度修饰符表示最大宽度,与该字段物理存储没有任何关系,也就是说,tinyint(1)和tinyint(4)有符号的情况下存储范围都是-128到127(没有符号就是0到255)。

    注意:有符号默认范围(-128~127),默认长度是4.

               无符号默认范围(0~255),默认长度是3.

    如果使用了zerofill,当实际长度达不到指定的显示长度时,就会用0在前面补齐。

    在mysql的数据类型中,tinyin与其带不带符号有关系,带符号取值范围为-128~127.不带符号为0~255。tinyint后面括号的数字,和存储的值没有任何关系,只是在某些情况下和显示的宽度有关系。 

    2 测试

    当将字符串类型的name字段设置的长度超过5会怎样?

     当将tinyint类型的(有符号)age字段设置范围不在(-128~127)会怎样?

    展开全文
  • tinyint存储只是用一个字节,就是8位,只能存储2^8个数字,也就是256个数字,在mysql实现中,有符号是-128-127,无符号是0-255tinyint后面的括号带的数字,以后称之为M,和存贮的值没有任何关系,只是在某些情况下和显示的...

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

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

    1. 常规测试

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

    f1d42cb06bbdad413623a722f564b179.png

    查询后发现没有任何区别

    bc998f5bdb2ebc3da2440019bc198746.png

    2. 无符号建表,同时zerofill

    建表的基本语句是

    4daf0f057eb8e84953805ab11c9b711d.png

    最后查询结果如下,比较明显

    bb90b08f917024ab9af463062000fe7e.png

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

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

    这里摘抄其中重要的一段

    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.

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

    绝对和存储的值没有关系

    mysql的console中也会忽略这些

    无符号和zerofill的时候会填充0,显示成M对应的宽度

    整数类型都一样,有默认的显示宽度

    M作为元数据存储,推荐是显示的宽度,但是最终的解释权归程序所有

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

    展开全文
  • 面试题:tinyint(1)和tinyint(4)的区别

    千次阅读 2020-09-15 14:39:59
    tinyint(1)和tinyint(4)的区别 加zerofill 当写入的值没有达到长度时,左边用零填充 当使用整合mybatis使用 使用mybatis查询时查出tinyint(1)的值是Boolean类型 原因: TINYINT(1) 只是在显示的时候作为一个位
  • tinyint(1)和tinyint(4)的区别和用法

    千次阅读 2020-06-04 09:08:23
    2.TINYINT[(M)] [UNSIGNED] [ZEROFILL]M默认为4 很小的整数。带符号的范围是-128到127。无符号的范围是0到255。 3.BOOL,BOOLEAN 是TINYINT(1)的同义词。zero值被视为假。非zero值视为真。 4....
  • 在MySQL的数据类型中,Tinyint的取值范围是:带符号的范围是-128到127。无符号的范围是0到255(见官方《MySQL 5.1参考手册》http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#numeric-types)。 Tinyint...
  • mysql中Tinyint(1)和Tinyint(4)的区别

    万次阅读 2018-10-08 11:04:51
    在mysql中如果设置字段为Tinyint类型,补0为1的话,比如:Tinyint(1) 这个不管在数据库中保存1,2,3,4的时候。在java或者c#获取表的对象,转换成类对象的时候,会变成boolean /bool 值类型。 如果想要保存具体的数字...
  •    在最初学习Java和MySQL的时,一直使用的是Boolean来接受tinyint类型的数据。具体操作:在数据库中设置TINYINT(1),存储0和1;在Java中使用boolean来接受,0代表false,1代表true。在潜意识中一直以为MySQL的...
  • 最大的区别就是没有不同 只是int(M) 中的M指示最大显示宽度,最大有效显示宽度是 255,且显示宽度与存储大小或类型包含的值的范围无关。 现在看来就是为了看着好看,比如我...但是tinyint(1)在mysql中表示bool 参考1:
  • 目录1.1tinyint类型说明1.2实践环境说明1.3加unsigned属性1.3.1SQL模式开启严格模式1.3.2SQL模式未开启严格模式1.4加zerofill属性1.4.1SQL模式开启严格模式1.4.2SQL模式未开启严格模式1.5不加unsigned和zerofill属性...
  • 1 bytes = 8 bit ,一个字节最多可以代表的数据长度是2的8次方 11111111 在计算机中也就是 ...2.TINYINT[(M)] [UNSIGNED] [ZEROFILL] M默认为4 很小的整数。带符号的范围是-128到127。无符号的范围是0到255。 3...
  • zerofill是指的一个整型字段在允许的最大位数之前用0填充,比如一个字段设置为tinyint(4),需要用4个数字表示,而tinyint最大值为(假如是unsigned修饰)255,那么前面不足4位数都将用0填充,例如:0005, 0010, 0100...
  • 一句话总结:所占位数不同,括号里面代表最大显示的长度 类型 占用字节 tinyint 1 smallint 2 mediumint ... 4 ...tinyint(M), M默认为4; SMALLINT(M), M默认为6; MEDIUMINT(M), ...
  • 展开全部mysql中tinyint在Oracle中是NUMBER数据类型来表示,也可以用INTEGER数据类型表示, INTEGER整数类型小的整数,不是可变的,它算是NUMBER的一个子32313133353236313431303231363533e4b893e5b19e...
  • Mybatis Generator将tinyint映射成Integer的解决办法
  • 4.执行程序会发现 如果数据库字段类型是tinyint,生成mapping文件之后变成了BIT,实体类变成了Boolean类型, 1)以下改成tinyInt1isBit=false 控制jdbcType为byte而不是boolean connectionURL="jdbc:...
  • MYSQL中TINYINT的取值范围

    万次阅读 2019-03-10 17:16:58
    在MySQL的数据类型中,Tinyint的取值范围是:带符号的范围是-128到127。无符号的范围是0到255(见官方《MySQL 5.1参考手册》http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#numeri...
  • 【1】mysql中的tinyint为什么长度是4

    千次阅读 2017-09-29 15:47:00
    如:tinyint(4), tinyint(80), tinyint(0) 三者没有任何区别,该类型最多还是只能存储1字节大小(即-127-128); 2.对应字符串: varchar(20)表示最大20个字符(无论中文还是字母,只算字符个数,不论字节)。 end...
  • } } 给相应的属性配置类型处理器 ***"> <result column="evaluation" jdbcType="TINYINT" property="evaluation" typeHandler="EntityEnumTypeHandler" /> resultMap> 在编辑操作的sql也需要配置,以插入为例 ***" ...
  • 8 bit ,一个字节最多可以代表的数据长度是2的8次方 11111111 在计算机中也就是-128到1271.BIT[M]位字段类型,M表示每个值的位数,范围从1到64,如果M被忽略,默认为12.TINYINT[(M)] [UNSIGNED] [ZEROFILL]M默认为4很...
  • mybatis-generator自动生成工具,包含tinyint处理,自动获取数据库注释
  • --SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int--关键说明:--1、从系统表syscolumns中的查询所有xtype='48'的记录得到类型为[tinyint]的字段--2、更新字段类型前如果该字段有默认值索引则应先删除掉...
  • tinyint(1)和tinyint(4)在mybatis中的区别

    千次阅读 2021-03-08 16:32:57
    tinyint(1)和tinyint(4)在mybatis中的区别 首先,tinyint在mysql中只占1byte,有符号的范围(-128,127),无符号的范围(0,255)。 这里主要介绍tinyint在mybatis中的映射问题,tinyint在mybatis中映射关系为: mysql `...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 104,623
精华内容 41,849
关键字:

tinyint(4)