我有三个值:0
、1
、NULL
。现在我想知道,哪种数据类型适合该列?
但在这种方式下,NULL
是该列(在数据库中)的默认值,并且我实现了URL的0
和1
形式参数(get方法)。类似这样的东西:
www.example.com/?q=param=0
然后
$var = isset($_GET['param']) ? $_GET['param'] : null;
然后
INSERT INTO table(col) values ($var);
更新
由于MySQL(8.0.16)和MariaDB(10.2.1)都实现了CHECK约束,我现在选择
bool_val TINYINT UNSIGNED CHECK(bool_val <= 1)
数据库<>小提琴
或
bool_val TINYINT CHECK(bool_val IN(0,1))
数据库<>小提琴
原始答案
我会使用比特值类型-比特
BIT(1) NULL DEFAULT NULL
BIT(1)
需要1字节的存储空间,与TINYINT(1)
相同。不同之处在于BIT(1)
仅接受值0
和1
(或b'0'
和b'1'
),而TINYINT(1) UNSIGNED
接受从0
到255
的值。括号中为TINYINT
定义的长度不会对可存储的值产生任何影响。它只是客户端的信息,如何显示值(例如,如果使用ZEROFILL
)。
2019年了!这在几年前就被标记为正确的。请参阅保罗·斯皮格尔(Paul Spiegel)在这个答案正下方的答案,了解更现代的答案#
TINYINT(1)无符号NULL
tinyint非常适合布尔