mysql 布尔或Tinyint混淆

r3i60tvu  于 2023-01-29  发布在  Mysql
关注(0)|答案(5)|浏览(137)

我正在为一个站点设计一个数据库,我需要使用boolean数据类型来存储两个状态,truefalse
在使用phpMyAdmin设计数据库时,我发现我同时具有BOOLEANTINYINT数据类型,我查阅了不同的文章,有些文章说TINYINTBOOLEAN相同,没有区别,有些文章说BOOLEANMySQL中转换为TINYINT
我的问题是,如果它们都是一样的,为什么会有两个呢?应该只有一个。
以下是我阅读的文章的参考:

nszi6y05

nszi6y051#

MySQL没有内部布尔数据类型。它使用最小的整数数据类型- TINYINT。
BOOLEAN和BOOL是TINYINT(1)的等价物,因为它们是同义词。
尝试创建此表-

CREATE TABLE table1 (
  column1 BOOLEAN DEFAULT NULL
);

然后运行SHOW CREATE TABLE,您将得到以下输出-

CREATE TABLE `table1` (
  `column1` tinyint(1) DEFAULT NULL
)
zf2sa74q

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,但足以导致单元测试失败。

hzbexzde

hzbexzde3#

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

5jvtdoz2

5jvtdoz24#

自MySql 5.1版本reference

BIT(M) =  approximately (M+7)/8 bytes, 
BIT(1) =  (1+7)/8 = 1 bytes (8 bits)

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

TINYINT(1) take 8 bits.

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

bfrts1fy

bfrts1fy5#

MySQL的数值类型概述如下:布尔,布尔:这些类型是TINYINT(1)的同义词。零值被视为false。非零值被视为true。
参见此处:https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html

相关问题