如何在MySQL中存储布尔数据类型?

时间:2015-06-10 12:01:44

标签: php mysql database mysqli boolean-logic

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

特别是在使用PHP脚本编写和阅读时。

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

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中的自动类型转换非常简单地给出了布尔值。

那么,有没有为布尔值设计的类型,我忽略了它?

您是否看到使用某种类型的优点/缺点?

3 个答案:

答案 0 :(得分:3)

有许多选项。

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

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

我们不会将TINYINT(1) UNSIGNED数据类型用于除布尔值之外的任何内容。 (我们可以添加NOT NULL。)我们添加一个注释,使用" boolean"作为第一个字符串,然后是实际描述。

请注意, (1) 不会影响可以存储的值范围。它仍然可以保存0到255之间的整数值。我们只是包含它来帮助区分我们的" boolean"从其他TINYINT值中键入,这些值不是布尔值。

我们将NULL值处理为NULL,将值0处理为" false",并将任何其他值视为" true" ...以同样的方式处理MySQL在布尔上下文中解释一个整数值。

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

答案 1 :(得分:1)

对于MySQL 5.0.3及更高版本,您可以使用BIT或TINYINT。

Here你有一个更详细的答案

答案 2 :(得分:1)

FOR mysql使用类型 BOOLEAN NOT NULL 类型 像

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

如果布尔不工作则使用tiny int之类的 TINYINT(1)NOT NULL 例如。 ALTER TABLE {产品{1}} {测试{1}}

重要  tinyint里面的TINYINT(1)值是必要的。