我知道 mysql 中的布尔值是 tinyint (1)
。
今天我看到一个表定义了一个像 tinyint(2)
这样的整数,还有其他像 int(4)
、int(6)
...
大小在 integer 和 tinyint 类型的字段中意味着什么?
(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]
。
表示显示宽度
无论您使用 tinyint(1) 还是 tinyint(2),都没有任何区别。
我总是使用 tinyint(1) 和 int(11),我使用了几个 mysql 客户端(navicat,sequel pro)。
这根本没有任何意义!我跑了一个测试,上面所有的客户端甚至命令行客户端似乎都忽略了这一点。
但是,如果您使用 ZEROFILL
选项,显示宽度 是最重要的,例如您的表格有以下 2 列:
一个 tinyint(2) 零填充
tinyint(4) 零填充
两列的值均为 1,A 列的输出将是 01
,B 的输出将是 0001
,如下面的屏幕截图所示:)
https://i.stack.imgur.com/L68G2.png
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)
关于INT、TINYINT……这些是不同的数据类型,INT是4字节数,TINYINT是1字节数。更多信息在这里 - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT。
TINYINT 数据类型的语法是 TINYINT(M),其中 M 表示最大显示宽度(仅在您的 MySQL 客户端支持时使用)。
不定期副业成功案例分享