枚举仍然是邪恶的吗(在 MySQL 8.0 中)?

Flo*_*jol 11 mysql enum mysql-8.0

因此,我与同事关于使用枚举与查找表存在分歧。

这篇 2011 年和 MySQL5.5 的非常老的文章仍然被那些不喜欢枚举的人一次又一次地引用。

但我们使用的是 MySQL8.0,数据库规模不是很大,比如 50 到 60 个表,有 30 左右的枚举列。
一些表的行数高达数百万行,大多数表的行数远低于 50 万行。
几乎所有枚举的值都少于 10 个,并且只有极少数在其生命周期中发生过更改(一次),总是在可能值的末尾添加新值。
而且我们从未“遭受”文章提到的任何缺点,例如将元数据存储在其旁边,引用其他表中的相同值等......

尽管文章在第 2 点中提到了这一点,但今天,在列表末尾添加值不会更新整个表,但删除值总是会更新(或至少读取)所有行。

我确实知道有两种流派,并且我了解两者的优点和缺点。

但是,今天在 MySQL8 上,是否存在任何实际/事实/技术原因,因此 ** 放弃现有列的枚举并证明应用程序和数据库中所需的所有工作都是合理的?

感谢您的阅读和回答。

Bil*_*win 10

MySQL 5.5 和 8.0 之间没有任何变化使 ENUM 比以前更邪恶或更不邪恶。

我认为称之为“邪恶”是夸张的。编程语言的特性并不是邪恶的。但它可能会被不了解其缺点的开发人员滥用。然后他们遇到了麻烦。

如果您拥有的 ENUM 列对您来说运行良好,并且您当前的项目没有受到负面影响,那么就没有理由切换它们。

当您设计新桌子时,记住优点和缺点是一件好事。在一个表中使用 ENUM 可能工作正常,但在同一项目的另一个表中使用它会遇到这些问题之一。这取决于每个表的使用方式。

我在《SQL 反模式卷 1:避免数据库编程的陷阱》一书中的一章中写了更多有关 ENUM 的内容。