【问题标题】:How to store boolean datatype in MySQL?如何在 MySQL 中存储布尔数据类型?
【发布时间】:2015-08-25 16:05:58
【问题描述】:

哪种数据类型用于在 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 中的自动类型转换为我提供了相当简单的布尔值。

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

您认为使用一种或另一种类型有什么优点/缺点吗?

【问题讨论】:

标签: php mysql database mysqli boolean-logic


【解决方案1】:

有很多选择。

为了与许多不同的 MySQL 客户端、客户端库、ORM 等兼容,我们选择了

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

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

请注意,(1) 不会影响可以存储的值的范围。它仍然可以保存从 0 到 255 的整数值。我们只是将它包括在内以帮助将我们的“布尔”类型与其他非布尔值的 TINYINT 值区分开来。

我们将 NULL 值处理为 NULL,将值 0 处理为“false”,并且任何其他值都被视为“true”......这与 MySQL 在布尔上下文中解释整数值的方式相同。

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

【讨论】:

    【解决方案2】:

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

    Here你有更详细的答案

    【讨论】:

    • 请注意,某些客户端/客户端库/ORM 映射不能很好地与 BIT 数据类型配合使用。但我们不会遇到整数类型的问题。
    【解决方案3】:

    对于 mysql 使用类型 BOOLEAN NOT NULL 类型 喜欢

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

    如果布尔值不起作用,请使用 tiny int TINYINT(1) 非空 例如。 ALTER TABLEproductsADDtestTINYINT(1) NOT NULL;

    重要 tinyint 中的 TINYINT(1) 值是必需的。

    【讨论】:

    • 为什么TINYINT后面的(1)是必要的?它不会影响可以存储的值的范围。
    • YES 需要 tiny-int,因为它的范围是 -128 到 127,所以需要指定是否使用 tiny int..
    • 是的,TINYINT 中可以存储的值的范围是 -128 到 127。这与可以存储在 TINYINT(1) 中。同样,没有解释为什么必须使用TINYINT(1)TINYINT。可以存储的值范围是相同。它有什么不同?
    猜你喜欢
    • 2010-09-22
    • 2011-03-10
    • 2016-05-25
    • 2022-01-18
    • 1970-01-01
    • 2013-09-23
    相关资源
    最近更新 更多