【问题标题】:What data type can be used to put a flag (boolean) in mysql?什么数据类型可用于在 mysql 中放置标志(布尔值)?
【发布时间】:2015-12-27 05:15:14
【问题描述】:

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

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

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

【问题讨论】:

  • MySQL 没有内部boolean 数据类型。您可以使用TINYINT(1)
  • @RayonDabre 这是如何工作的? TINYINT 的默认值是什么,参数是什么?是 TINYINT(1) 是真还是 TINYINT(0) 是假?以及如何将数据插入到该表中? INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...)
  • @programmer 你能给我反馈一下我的答案吗?

标签: php mysql sql database


【解决方案1】:

您应该能够将该列声明为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)。这是遗留功能的一部分,它为应用程序提供了关于存储在列中的值的预期宽度的提示......它对于显示终端上的固定宽度字体很有用,但今天的应用程序在很大程度上忽略了这一点,而这value 不会改变列的内容或它的存储要求。 TINYINT 每行需要 1 个字节的存储空间。

通常不建议在布尔情况下使用ENUM,因为在幕后,枚举具有可能导致逻辑歧义的数值,因为值的“字符串”将隐式转换为它的整数索引(在某些情况下,从 1 开始,而不是从 0 开始。

【讨论】:

    【解决方案2】:

    使用 ENUM 类型。枚举可以具有您定义的值,并且不能接受任何值,除非您为其定义。这是示例

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

    【讨论】:

    • 这个参数到底是什么?我输入了 ENUM 作为该列的数据类型,它说的是 ENUM()。我在括号中输入什么?
    • 请给出SQL插入示例。
    • @MikhailBatcer 插入语句与任何其他 varcahar 字段一样,除了此字段仅接受定义的值
    猜你喜欢
    • 2010-09-22
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    相关资源
    最近更新 更多