存储0、1、null值的最佳数据类型


The best data type to store 0, 1, null values

我有三个值:01NULL。现在我想知道,哪种数据类型适合该列?

但在这种方式下,NULL是该列(在数据库中)的默认值,并且我实现了URL的01形式参数(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)仅接受值01(或b'0'b'1'),而TINYINT(1) UNSIGNED接受从0255的值。括号中为TINYINT定义的长度不会对可存储的值产生任何影响。它只是客户端的信息,如何显示值(例如,如果使用ZEROFILL)。

2019年了!这在几年前就被标记为正确的。请参阅保罗·斯皮格尔(Paul Spiegel)在这个答案正下方的答案,了解更现代的答案#

TINYINT(1)无符号NULL

tinyint非常适合布尔