mysql - MySQL中的tinyint(M)有什么用处?

标签 mysql tinyint

这更多的是一个学术问题。在 MySQL 数据库中,我知道本网站已讨论过 tinyint(M) 及其与 tinyint(1) 的差异,但我想知道其他内容。

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

最佳答案

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) 这样的语法,但现在更改它已经太晚了。

关于mysql - MySQL中的tinyint(M)有什么用处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70988614/

相关文章:

c# - 带有 WHERE 子句的 2 个表的 MySql 内部连接

sql - 当我知道值不会超过 255 时,设置 tinyint 字段是否有优势?

mysql 的 tinyints 总和

mysql - Rails 连接表问题

mysql - SQL 在不知道列名的情况下更新行

php - 如何将变量与连接它们的逗号分开并显示它们?

c++ - MariaDB,在c++程序中执行存储过程时出现语法错误

mysql - 哪个更快 : char(1) or tinyint(1) ? 为什么?

mysql - 无法更新为 tinyint 和 varchar 字段的默认值 null 和空字符串

symfony - mysql tinyint(2) 与 Doctrine 的 bool 值映射不正确