我知道布尔在mysql为tinyint (1)。
tinyint (1)
今天,我看到一个表定义了一个整数,如tinyint(2),以及其他像int(4), int(6)…
tinyint(2)
int(4)
int(6)
在类型为整型和tinyint的字段的大小意味着什么?
关于INT, TINYINT…这是不同的数据类型,INT是4字节的数字,TINYINT是1字节的数字。更多信息在这里- 整数,int, smallint, tinyint, mediumint, bigint。
TINYINT数据类型的语法是TINYINT(M),其中M表示最大显示宽度(仅在MySQL客户端支持时使用)。
数字类型属性。
(m)表示列显示宽度;应用程序(如MySQL客户端)在显示查询结果时就会使用它。
(m)
例如:
| 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)。如您所见,它使用显示宽度填充左侧的值。
a
b
c
TINYINT(1)
TINYINT(2)
TINYINT(3)
需要注意的是,它不会影响该特定类型的可接受值范围,即TINYINT(1)仍然接受[-128 .. 127]。
[-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选项,显示宽度是最重要的,例如你的表有以下两列:
ZEROFILL
一个 tinyint(2) zerofill
B tinyint(4) zerofill
两个列的值都是1,列一个的输出将是01,列B的输出将是0001,如下面的截图所示:)
01
0001