我知道布尔在mysql为tinyint(1)。

今天我看到一个表,定义了一个整数,如tinyint(2),还有其他像int(4), int(6)…

在类型为整型和tinyint的字段的大小意味着什么?


关于INT, TINYINT…这是不同的数据类型,INT是4字节的数字,TINYINT是1字节的数字。更多信息在这里- INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT。

TINYINT数据类型的语法是TINYINT(M),其中M表示最大显示宽度(仅在MySQL客户端支持时使用)。

数值类型属性。


(m)表示列显示宽度;应用程序(如MySQL客户端)在显示查询结果时就会使用它。

例如:

| v   | a   |  b  |   c |
+-----+-----+-----+-----+
| 1   | 1   |  1  |   1 |
| 10  | 10  | 10  |  10 |
| 100 | 100 | 100 | 100 |

这里a, b和c分别使用TINYINT(1), TINYINT(2)和TINYINT(3)。如您所见,它使用显示宽度填充左侧的值。

需要注意的是,它并不影响该特定类型的可接受值范围,即TINYINT(1)仍然接受[-128 ..127]。


mysql> CREATE TABLE tin3(id int PRIMARY KEY,val TINYINT(10) ZEROFILL);
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO tin3 VALUES(1,12),(2,7),(4,101);
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM tin3;
+----+------------+
| id | val        |
+----+------------+
|  1 | 0000000012 |
|  2 | 0000000007 |
|  4 | 0000000101 |
+----+------------+
3 rows in set (0.00 sec)

mysql>

mysql> SELECT LENGTH(val) FROM tin3 WHERE id=2;
+-------------+
| LENGTH(val) |
+-------------+
|          10 |
+-------------+
1 row in set (0.01 sec)


mysql> SELECT val+1 FROM tin3 WHERE id=2;
+-------+
| val+1 |
+-------+
|     8 |
+-------+
1 row in set (0.00 sec)

它表示显示宽度

无论你使用tinyint(1)还是tinyint(2),都没有任何区别。

我总是使用tinyint(1)和int(11),我使用了几个mysql客户端(navicat, sequel pro)。

它根本没有任何意义!我运行了一个测试,所有以上客户端甚至命令行客户端似乎都忽略了这一点。

但是,如果你使用ZEROFILL选项,显示宽度是最重要的,例如你的表有以下2列:

一个小(2)零填充

B tinyint(4)零填充

两列的值都是1,A列的输出是01,B列的输出是0001,如下面的截图所示:)