227

我知道 mysql 中的布尔值是tinyint (1).

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

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

4

4 回答 4

253

表示列(m)显示宽度;MySQL 客户端等应用程序在显示查询结果时会使用此功能。

例如:

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

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

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

于 2012-10-11T12:56:41.287 回答
136

表示显示宽度

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

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

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

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

一个tinyint(2) 零填充

B tinyint(4) 零填充

两列的值均为 1,列A 的输出为B01,如下面的屏幕截图所示:)0001

带显示宽度的零填充

于 2016-12-02T18:33:33.943 回答
19
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)
于 2014-04-17T07:09:19.603 回答
17

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

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

数字类型属性

于 2012-10-11T12:55:57.073 回答