MySQL数据类型:int与enum的区别

4
我有一些只需要存储少量值(例如0、1、2、3)的列。在这种情况下,我应该选择什么数据类型?我觉得我应该选择像ENUM('0','1','2')这样的东西。尽管int不那么严格,但是否更好?我应该考虑其他什么(例如tinyint)?
编辑:
实际上,在决定数据类型时,应该考虑哪些一般性建议?

一般建议?总是选择正确的 :) - Pekka
你是指右边那个吗? :P - Mchl
2个回答

5

如果你想将值限制在这三个选项内,那么ENUM可能是最好的选择。

但是,如果未来有可能需要更多的选项,那么TINYINT UNSIGNED可能是更好的解决方案。


是的。即使有数百万条记录,使用ENUM相比于INT/TINYINT存储的数据量也微不足道。通常情况下,最好使用后者。 - Pekka
为什么 ENUM 比 int 或 tinyint 更好?是因为它可以限制可存储的数据(即更好的数据完整性)吗?这与存储要求有关吗?还是速度?或者其他原因? - StackOverflowNewbie
枚举值被存储为索引,需要2个字节(smallint unsigned),因此您最多可以拥有65535个枚举元素。 - Jon Black
是的,ENUM 的主要优势在于限制允许的值集合(因为 MySQL 中还没有列约束)。就性能而言,TINYINT 可能会更快。 - Mchl

1

在编程中,建议使用具有固定集的枚举。如果想要扩展,则基本上是“改变”模式,应该避免。

关于选择数据类型,寻找更好的想法

比较枚举与数据类型


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接