我正在为一个站点设计一个数据库,我需要使用boolean
数据类型来存储两个状态,true
或false
。
在使用phpMyAdmin
设计数据库时,我发现我同时具有BOOLEAN
和TINYINT
数据类型,我查阅了不同的文章,有些文章说TINYINT
与BOOLEAN
相同,没有区别,有些文章说BOOLEAN
在MySQL
中转换为TINYINT
。
我的问题是,如果它们都是一样的,为什么会有两个呢?应该只有一个。
以下是我阅读的文章的参考:
我正在为一个站点设计一个数据库,我需要使用boolean
数据类型来存储两个状态,true
或false
。
在使用phpMyAdmin
设计数据库时,我发现我同时具有BOOLEAN
和TINYINT
数据类型,我查阅了不同的文章,有些文章说TINYINT
与BOOLEAN
相同,没有区别,有些文章说BOOLEAN
在MySQL
中转换为TINYINT
。
我的问题是,如果它们都是一样的,为什么会有两个呢?应该只有一个。
以下是我阅读的文章的参考:
5条答案
按热度按时间nszi6y051#
MySQL没有内部布尔数据类型。它使用最小的整数数据类型- TINYINT。
BOOLEAN和BOOL是TINYINT(1)的等价物,因为它们是同义词。
尝试创建此表-
然后运行SHOW CREATE TABLE,您将得到以下输出-
zf2sa74q2#
只是给php开发人员的一个提示(我缺少必要的stackoverflow点来将此作为评论发布)...自动(和静默)转换为TINYINT意味着php从“BOOLEAN”列中检索值为“0”或“1”,而不是(我所期望的)真/假。
一个开发人员正在查看用于创建表的SQL,并看到如下内容:“some_boolean BOOLEAN NOT NULL DEFAULT FALSE”,当检索包含该列的行时,可能会合理地期望看到true/false结果。相反(至少在我的PHP版本中),结果将是“0”或“1”(是的,字符串“0”或字符串“1”,而不是int 0/1,谢谢php)。
这是一个nit,但足以导致单元测试失败。
hzbexzde3#
最新的MySQL版本有新的
BIT
数据类型,您可以在其中指定字段中的位数,例如BIT(1)
用作Boolean
类型,因为它只能是0
或1
。5jvtdoz24#
自MySql 5.1版本reference起
=========================================================================
https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html#data-types-storage-reqs-numeric
bfrts1fy5#
MySQL的数值类型概述如下:布尔,布尔:这些类型是TINYINT(1)的同义词。零值被视为false。非零值被视为true。
参见此处:https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html