tinyint(size),varchar(size):“大小”说明

我知道tinyint(1)和tinyint(2)具有相同的存储空间范围。

唯一的区别是显示宽度会有所不同。这是否意味着tinyint(1)将存储所有类型的整数,但只能正确显示0到9的范围?而且tinyint(2)仅正确显示0到99?

并且提到最大大小为tinyint(255)。也有其他类似varchar(500)类型的宽度。除非存储论文,否则在什么情况下您需要文本和整数这样大的显示宽度?像密码加密之类的?

如果问题中所写的任何上述信息有误,请纠正我。

问题补充:显示宽度仅适用于char,varchar等,不适用于整数类型。

但是,为什么要麻烦输入“ M”,因为对于整数来说,除了零填充以外,它对存储它没有任何影响?

评论
  • 二湿胸
    二湿胸 回复

    您的困惑解决方案是-

    在Mysql中,int(6)并不意味着它们最多可以存储6位数字。不超过999999。

    但是CHAR(6) 这意味着一个字符列,最大长度为6个字符,例如:

    房屋

    如果我尝试将“特殊”一词存储在该列中,则MySQL会将值切为“特殊”,因为原始单词有7个字符。

    无论如何,整数列都具有允许的预设值范围。括号中的数字仅表示显示宽度。

    这可能仍然令人困惑,所以让我进一步解释...

    显示宽度是1到255之间的一个数字。如果希望所有整数值都类似地“出现”,则可以设置显示宽度:

    TINYINT [(M)] [未签名] [零填充]

    M表示整数类型的最大显示宽度。最大显示宽度为255。显示宽度与类型可以包含的值的范围无关。对于浮点和定点类型,M是可以存储的总位数。

    如果为数字列指定ZEROFILL,MySQL会自动将UNSIGNED属性添加到该列。

    所以你的问题的答案是

    create table foo
    (
    col2 tinyint(2) unsigned zerofill, col4 tinyint(4) unsigned zerofill, col5notzerofill        tinyint(5)  
    )engine=innodb;
    
    insert into foo values (1,2,3),(11,12,14),(123,123,156),(1234,1234,12756);
    select * from foo;
    
    OUTPUT :-
    +------+------+-----------------+
    | col2 | col4 | col5notzerofill |
    +------+------+-----------------+
    |   01 | 0002 |               3 |
    |   11 | 0012 |              14 |
    |  123 | 0123 |             127 |
    |  255 | 0255 |             127 |
    +------+------+-----------------+
    

    *因此请理解,在Mysql中,显示宽度仅适用于zerofill。

    *如果不使用填零功能,则无效。

    如果使用zerofill,则mysql将检查display width,如果不分配,则mysql将自动为该列分配display-width。*