我有一个数据库,其中包含以下列:
emp_id: INT(11) (PRIMARY KEY)
FirstName: varchar(45)
LastName: varchar(45)
password: varchar(45)
admin: ????
我希望admin列成为一个标志,因此该员工可以是admin(true),也可以不是admin(false)。有人可以告诉我在mysql表中分配给这个列的数据类型是什么?
答案 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'