哪个数据类型用于在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中的自动类型转换给我的布尔值非常简单。
那么,是否有一个为布尔值设计的类型我忽略了?
您是否看到使用一种或另一种类型有什么优点/缺点?
Tinyint是个不错的选择。
这里有一个很好的答案:stackoverflow.com/questions/289727/…
有很多选择。
为了与许多不同的MySQL客户端、客户端库、ORM等兼容,我们已经解决了
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类型喜欢
ALTER TABLE `products` ADD `test` BOOLEAN NOT NULL;
如果布尔值不起作用,则使用类似int的tinyint(1)不为空例如,ALTER TABLE产品ADD测试TINYINT(1) NOT NULL;产品
重要的tinyint(1)值必须在tinyint内。
为什么需要(1)跟在TINYINT后面?它不会影响可存储的值的范围。
是的,需要使用miny int,因为它的范围在-128到127之间,所以需要指定是否使用miny int。
是的,可以存储在TINYINT中的值的范围是-128到127。这与可以存储在TINYINT(1)中的值的范围相同。同样,没有解释为什么有必要使用TINYINT(1)与TINYINT。可以存储的值的范围是相同的。它有什么区别?
对于MySQL5.0.3及更高版本,可以使用bit或tinyint。
这里有一个更详细的答案
注意,一些客户机/客户机库/ORM映射不能很好地处理BIT数据类型。但是我们不会遇到整数类型的问题。