这更多的是一个学术问题。在 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/