我正在为一个网站设计一个数据库,在这个网站上我只需要使用一个布尔数据类型来存储两个状态,真或假。我正在使用MySQL。
在使用phpMyAdmin设计数据库时,我发现我同时拥有BOOLEAN数据类型和TINYINT数据类型。
我看了不同的文章,有些人说TINYINT和BOOLEAN是一样的,没有区别。有人说,在MySQL中,BOOLEAN被转换为TINYINT。
我的问题是,如果它们都一样,为什么会有两个呢?它们中应该只有一个。
以下是我读过的文章的参考:
http://www.careerride.com/MySQL-BOOL-TINYINT-BIT.aspx
http://dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html
发布于 2012-06-23 15:49:55
MySQL没有内部布尔数据类型。它使用最小的整数数据类型- TINYINT。
BOOLEAN和BOOL是TINYINT(1)的等价物,因为它们是同义词。
尝试创建此表-
CREATE TABLE table1 (
column1 BOOLEAN DEFAULT NULL
);然后运行SHOW CREATE TABLE,您将获得以下输出-
CREATE TABLE `table1` (
`column1` tinyint(1) DEFAULT NULL
)发布于 2014-12-05 05:29:13
仅供php开发人员注意(我缺乏必要的堆栈溢出点来将其作为评论发布)……自动(静默)到TINYINT的转换意味着php从"BOOLEAN“列检索一个值作为"0”或"1",而不是预期的(我) true/false。
查看用于创建表的some_boolean的开发人员看到的内容类似于:"some_boolean NOT NULL DEFAULT FALSE“,当检索到包含该列的行时,可能会合理地期望看到true/false结果。相反(至少在我的php版本中),结果将是"0“或"1”(是的,字符串"0“或字符串"1",而不是int 0/1,谢谢PHP)。
这是一个nit,但足以导致单元测试失败。
发布于 2013-06-25 21:33:42
最新的MySQL版本具有新的BIT数据类型,您可以在其中指定字段中的位数,例如用作Boolean类型的BIT(1),因为它只能是0或1。
https://stackoverflow.com/questions/11167793
复制相似问题