BOOLEAN或TINYINT混乱

Bip*_*thi 87 mysql types boolean tinyint

我正在为一个网站设计一个数据库,我需要使用布尔日期类型来存储2个状态,无论是真还是假.我正在使用MySQL.
在使用phpMyAdmin设计数据库时,我发现我同时拥有BOOLEAN数据类型和TINYINT数据类型.
我经历了不同的文章,有人说TINYINT和BOOLEAN一样,没什么区别.有人说BOOLEAN在MySQL中转换为TINYINT.

我的问题是,如果两者相同,为什么存在两个呢?应该只有一个.

以下是我读过的文章的参考:
http://www.careerride.com/MySQL-BOOL-TINYINT-BIT.aspx
http://dev.mysql.com/doc/refman/5.5/en/numeric-type -overview.html

Dev*_*art 127

MySQL没有内部布尔数据类型.它使用最小的整数数据类型 - TINYINT.

BOOLEAN和BOOL是TINYINT(1)的等价物,因为它们是同义词.

尝试创建此表 -

CREATE TABLE table1 (
  column1 BOOLEAN DEFAULT NULL
);
Run Code Online (Sandbox Code Playgroud)

然后运行SHOW CREATE TABLE,你会得到这个输出 -

CREATE TABLE `table1` (
  `column1` tinyint(1) DEFAULT NULL
)
Run Code Online (Sandbox Code Playgroud)

  • 是的,你可以知道有`BIT(1)`或`BIT(17)`甚至`BIT(64)` (5认同)
  • @Devart - 你的答案得票最多并且首先出现(无论如何都在我的列表中)并且已经过去一段时间了,你有没有机会愿意添加你的答案,在MySQL 5.1上包含一些关于BIT类型的讨论后来? (3认同)
  • @Jonathan或许提到它很有价值,但是BIT(1)实际上并没有使用比TINYINT(1)更少的空间,并且不像大多数人在使用标准mysql控制台时所期望的那样显示.由于这种缺点,并且没有存储优势,仅使用TINYINT(1)或BOOLEAN似乎是我的经验中最常见的. (3认同)
  • 似乎它是为了向后兼容而完成的.BOOLEAN数据类型在MySQL 5之前并且没有优化BIT类型,它也是TINYINT.从文档 - 计划为5.1的新功能:优化BIT类型采取一点.(BIT现在占用一个字节;它被视为TINYINT的同义词.). (2认同)

Tom*_*ugh 30

只是php开发者的一个注释(我没有必要的stackoverflow点来发布这个评论)...自动(和静默)转换为TINYINT意味着php从"BOOLEAN"列中检索一个值为"0"或"1",不是预期的(由我)真/假.

正在查看用于创建表的SQL并且看到类似"some_boolean BOOLEAN NOT NULL DEFAULT FALSE"的开发人员可能合理地期望在检索包含该列的行时看到真/假结果.相反(至少在我的PHP版本中),结果将是"0"或"1"(是的,字符串"0"或字符串"1",而不是int 0/1,谢谢你的PHP).

这是一个问题,但足以导致单元测试失败.

  • 另外需要注意的是,PHP的mysql驱动程序将所有整数类型作为字符串引入. (2认同)

Ple*_*rds 24

最新的MySQL版本具有新的BIT数据类型,您可以在其中指定字段中的位数,例如BIT(1)用作Boolean类型,因为它只能是01.


for*_*une 7

截至MySql 5.1版本参考

BIT(M) =  approximately (M+7)/8 bytes, 
BIT(1) =  (1+7)/8 = 1 bytes (8 bits)
Run Code Online (Sandbox Code Playgroud)

================================================== =======================

TINYINT(1) take 8 bits.
Run Code Online (Sandbox Code Playgroud)

https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html#data-types-storage-reqs-numeric


Pat*_*erg 6

MySQL 的数字类型概述指出: BOOL、BOOLEAN:这些类型是 TINYINT(1) 的同义词。零值被视为错误。非零值被视为 true。

请参阅此处: https ://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html