我们通常使用以下几种方式表示布尔值:
tinyint(1)
bit(1)
enum('Y','N')
在 MySQL 中 bool
, boolean
是 tinyint(1)
的别名。
如果只是一个 True OR False 的布尔型,没有比 bit(1)
更合适的了。
但是也有些时候,我们有好几个 bool 型用一个字段表示,最好用 bit(m)
,我也用过 int
型。
附:不同值的长度
Type | Bit | Byte | Note |
---|---|---|---|
tinyint |
8 | 1 | |
smallint |
16 | 2 | |
middleint |
24 | 3 | |
int |
32 | 4 | |
bigint |
64 | 8 | |
bit(m) |
m | (m+7)/8 | |
binary[(m)] |
m | m 默认值:1 | |
varbinary(m) |
(m+1) | ||
tinyblob |
(L+1) | 1B 长度,最长 255B | |
blob[(m)] |
(L+2) | 2B 长度,最长 64KB - 1 | |
mediumblob |
(L+3) | 3B 长度,最长 16MB - 1 | |
longblob |
(L+4) | 4B 长度,最长 4GB - 1 | |
enum('a',..) |
1/2 | 最多可以存储 2^16 - 1 个值 | |
set('a',..) |
1/2/3/4/8 | 最多可以存储 64 个值 |
PS: blob
如果指定长度 m
,MySQL 会选择足够存储数据的最小长度。
PS: MySQL set 类型
参考资料与拓展阅读
- MySQL 文档 (v8.0), 11.9 Using Data Types from Other Database Engines
- MySQL 文档 (v5.7), 11.9 Using Data Types from Other Database Engines
- MySQL 文档 (v5.6), 11.8 Using Data Types from Other Database Engines