关于php:如何在MySQL中存储布尔数据类型?

How to store boolean datatype in MySQL?

哪个数据类型用于在MySQL中存储true/false信息?

尤其是用PHP脚本编写和阅读时。

随着时间的推移,我使用并看到了几种方法:

1
2
3
tinyint, varchar fields containing the values 0/1,
varchar fields containing the strings '0'/'1' or 'true'/'false'
and finally enum Fields containing the two options 'true'/'false'.

似乎没有一个是最佳的,我更喜欢tinyint 0/1 variant,因为PHP中的自动类型转换给我的布尔值非常简单。

那么,是否有一个为布尔值设计的类型我忽略了?

您是否看到使用一种或另一种类型有什么优点/缺点?


有很多选择。

为了与许多不同的MySQL客户端、客户端库、ORM等兼容,我们已经解决了

1
 col  TINYINT(1) UNSIGNED COMMENT 'boolean, ...'

除了Boolean之外,我们不使用TINYINT(1) UNSIGNED数据类型。(我们可以在其中添加NOT NULL)我们添加了一个注释,其中"boolean"作为第一个字符串,后跟实际的描述。

注意,(1)不会影响可存储的值的范围。它仍然可以保存0到255之间的整数值。我们只是为了帮助区分"布尔"类型和其他tinyint值,这些值不是布尔值。

我们将空值作为空值处理,将0的值作为"false",任何其他值都被认为是"true"…与mysql在布尔上下文中解释整数值的方式相同。

我们没有遇到任何无法处理整数类型的客户端。


对于mysql,使用类型boolean not null类型喜欢

1
ALTER TABLE `products` ADD `test` BOOLEAN NOT NULL;

如果布尔值不起作用,则使用类似int的tinyint(1)不为空例如,ALTER TABLE产品ADD测试TINYINT(1) NOT NULL;产品

重要的tinyint(1)值必须在tinyint内。


对于MySQL5.0.3及更高版本,可以使用bit或tinyint。

这里有一个更详细的答案