哪种MySQL数据类型用于存储布尔值

由于MySQL似乎没有任何“布尔”数据类型,您在MySQL中存储真/假信息时,您滥用哪种数据类型?

特别是在写入和读取PHP脚本的情况下。

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

  • tinyint,包含值0/1的varchar字段,
  • 包含字符串'0'/'1'或'true'/'false'的varchar字段
  • 最后枚举包含两个选项“真”/“假”的字段。
  • 以上都不是最佳。 我倾向于使用tinyint 0/1变体,因为PHP中的自动类型转换给了我相当简单的布尔值。

    那么你使用哪种数据类型? 是否有为我忽略的布尔值设计的类型? 你是否看到使用这种或那种类型的优点/缺点?


    对于MySQL 5.0.3及更高版本,您可以使用BIT 。 手册说:

    从MySQL 5.0.3开始,BIT数据类型用于存储位域值。 一种BIT(M)可以存储M位值。 M可以从1到64。

    否则,根据MySQL手册,您可以使用bint和boolean,它们是tinyint(1)的别名:

    Bool,Boolean:这些类型是TINYINT(1)的同义词。 零值被认为是错误的。 非零值被认为是真实的。

    MySQL还指出:

    我们打算在未来的MySQL版本中按照标准SQL实现完整的布尔类型处理。

    参考文献:http://dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html

    顺便说一句:这只是https://google.com/search?q=mysql+boolean+datatype的问题。

    有趣的是,这个链接几年前发布,已经成为递归。


    BOOLBOOLEANTINYINT(1)同义词。 零是false ,其他的都是true 。 更多信息在这里。


    这是一个优雅的解决方案,我很欣赏,因为它使用零数据字节:

    some_flag CHAR(0) DEFAULT NULL
    

    要将其设置为true,请设置some_flag = ''并将其设置为false,请设置some_flag = NULL

    然后为了测试true,检查some_flag是否IS NOT NULL ,并测试false,检查some_flag是否为IS NULL

    (这种方法在Jon Warren Lentz,Baron Schwartz和Arjen Lentz的“高性能MySQL:优化,备份,复制和更多”中有描述。)

    链接地址: http://www.djcxy.com/p/4261.html

    上一篇: Which MySQL data type to use for storing boolean values

    下一篇: 8 all the way through