MySql:Tinyint(2)vs tinyint(1) – 有什么区别?
我知道布尔在MySQL作为tinyint (1)
。
今天我看到一个定义了一个像tinyint(2)
这样的整数表,还有一些像int(4)
, int(6)
…
整数和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)
。 如您所见,它使用显示宽度填充左侧的值。
重要的是要注意,它不会影响该特定types的可接受的值范围,即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)
关于INT,TINYINT …这些是不同的数据types,INT是4字节数字,TINYINT是1字节数字。 更多信息在这里 – INTEGER,INT,SMALLINT,TINYINT,MEDIUMINT,BIGINT 。
TINYINT数据types的语法是TINYINT(M),其中M表示最大显示宽度(仅在MySQL客户端支持时使用)。
数字types属性 。
这意味着显示宽度
无论使用tinyint(1)还是tinyint(2),都没有任何区别。
我总是使用tinyint(1)和int(11),我用了几个mysql客户端(navicat,sequel pro)。
这并不意味着什么! 我跑了一个testing,所有以上的客户端甚至命令行客户端似乎忽略了这一点。
但是,如果您使用ZEROFILL
选项, 显示宽度是最重要的,例如您的表格有以下2列:
一个 tinyint(2)zerofill
B tinyint(4)zerofill
两列的值都是1,列A的输出将是01
, B的输出是0001
,如下面的截图所示:)
列长度可用于validation目的