如果我在 MySQL 数据库中有一个列:
- 不可为空
- 是一个有 5 个可能值的 ENUM
- 这些 ENUM 的默认值为 1
是否可以保证除了这些 ENUM 之一之外,该列中永远不会有值?
默认情况下不是 - 除了枚举的值之外,您的列还可以具有另一个值,即列中的空字符串。
您必须在 MySQL 中启用严格的 SQL 模式才能保证只有枚举值(如果该列可以为空,则为 NULL)可以发生。
取自这里
如果将无效值插入 ENUM(即,允许值列表中不存在的字符串),则会将空字符串作为特殊错误值插入。这个字符串可以通过这个字符串的数值 0 与“普通”空字符串区分开来。有关枚举值的数字索引的详细信息,请参见第 11.4.4 节,“枚举文字的索引值”。
如果启用了严格的 SQL 模式,尝试插入无效的 ENUM 值会导致错误。
如果启用了严格的 SQL 模式,尝试插入无效的 ENUM 值会导致错误。