【问题标题】:What is the utility of tinyint(M) in MySQL?MySQL 中 tinyint(M) 的用途是什么?
【发布时间】:2022-10-23 00:31:05
【问题描述】:

这更像是一个学术问题。在 MySQL 数据库中,我知道 tinyint(M) 以及它与 tinyint(1) 的区别已经在这个网站上讨论过,但我想知道别的。

列“REVIEWED TINYINT(5) 是否可用于在前端表单中存储 5 个不同的布尔复选框的值?我正在考虑将其视为一个数组。如果是这样,它们将如何被引用?会有什么像 REVIEWED(3) 或 REVIEWED[3] 一样可以引用它们的元素?是否有语法来检查它们的所有元素是 1 还是 0(或 null)?

【问题讨论】:

    标签: mysql tinyint


    【解决方案1】:

    TINYINT(1) 和 TINYINT(5) 和 TINYINT(12) 或任何其他长度实际上存储完全相同。它们都是 8 位有符号整数。它们支持从 -128 到 127 的整数值。如果列被定义为无符号整数,则支持从 0 到 255 的值。

    那么“长度”参数是什么?没有什么。它不会影响整数的大小或位数或值的范围。论据是一个显示提示只要。除非您使用 ZEROFILL 选项,否则它是无用的。

    mysql> create table mytable (i1 tinyint(1) zerofill, i2 tinyint(5) zerofill, i3 tinyint(12) zerofill);
    Query OK, 0 rows affected (0.04 sec)
        
    mysql> insert into mytable values (255,255,255);
    Query OK, 1 row affected (0.02 sec)
    
    mysql> select * from mytable;
    +------+-------+--------------+
    | i1   | i2    | i3           |
    +------+-------+--------------+
    |  255 | 00255 | 000000000255 |
    +------+-------+--------------+
    

    ZEROFILL 选项强制该列是无符号的,当您查询该列时,它会将结果用零填充到您为该列定义的长度。零不存储在数据库中,它们仅在您获取查询结果时添加。

    整数的“长度”参数具有误导性,它会给 MySQL 用户带来很多困惑。事后看来,使用TINYINT ZEROFILL(12) 之类的语法会更好,但现在更改它为时已晚。

    【讨论】:

      【解决方案2】:

      自从发布这个问题以来,我意识到字段不能被视为数组,并且当我的布尔值不断转换为 tinyint(1) 时,1 不是元素的数量,而是最大值(其中,正如 Bill Karwin 指出的那样,实际上只是一个显示提示),这是有道理的,因为布尔值要么是 0 要么是 1。应该没有理由需要数组,因为可以简单地创建额外的字段。正如我所说,这是一个学术问题。比尔给了我足够的启发,我想从这个问题继续前进。

      【讨论】:

      • 这不是答案 (Stack Overflow is not a forum)。到目前为止,我们只需要一份状态报告,它可以启发未来的读者。您现在有足够的声望点来评论仅帖子。
      猜你喜欢
      • 2013-12-24
      • 2010-09-22
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多