可以使用什么数据类型在mysql中放置标志(布尔值)?

时间:2015-12-27 05:15:14

标签: php mysql sql database

我有一个数据库,其中包含以下列:

emp_id: INT(11) (PRIMARY KEY)
FirstName: varchar(45)
LastName: varchar(45)
password: varchar(45)
admin: ????

我希望admin列成为一个标志,因此该员工可以是admin(true),也可以不是admin(false)。有人可以告诉我在mysql表中分配给这个列的数据类型是什么?

2 个答案:

答案 0 :(得分:3)

您应该可以将列声明为TINYINT NOT NULL DEFAULT FALSE(或DEFAULT 0)。

插入内容为VALUES (TRUE, ...VALUES (FALSE, ...VALUES(1, ...VALUES (0, ...

作为一个不带引号的文字,TRUE相当于1,而FALSE相当于0,因为MySQL中没有纯粹的布尔数据类型。

您的应用程序将始终将该列视为结果集中包含1或0。

忽略括号中的数字,例如TINYINT(1)TINYINT(4)。这是传统功能的一部分,它为应用程序提供了关于列中存储的值有多宽的提示......它对显示终端上的固定宽度字体很有用,但很大程度上被应用程序忽略了今天,此值不会更改列的内容或列的存储要求。 TINYINT每行需要1个字节的存储空间。

对于布尔情况,通常建议使用ENUM,因为在幕后,枚举具有可能导致逻辑模糊的数值,因为"字符串"对于某个值,将在某些上下文中隐式转换为它的整数索引(从1开始,而不是从0开始)。

答案 1 :(得分:-2)

使用ENUM type.enum可以包含您定义的值,并且除了为其定义之外不能接受任何值。这是示例

 enum('DENYED','NOT_ACCEPTED','ACCEPTED') COLLATE utf8_persian_ci DEFAULT 'NOT_ACCEPTED'