在MySQL中自动增长ENUM

时间:2012-07-17 10:19:11

标签: mysql sql dynamic enums

我希望优化具有VARCHAR列的表格,这些列只有少数 - 大部分时间少于几十,有时是几百个不同的值。所以我希望将列转换为ENUM s,关键在于我无法预测值本身,因此我希望在必要时即时构建它们。

不幸的是,似乎MySQL在插入不存在的值时不会抛出错误,而是存储NULL

例如:

CREATE TABLE `enumed` (
  `col` ENUM( 'a', 'b' )
);

INSERT INTO `enumed` ( `col`) VALUES ('b');
INSERT INTO `enumed` ( `col`) VALUES ('z');

将存储'b'行和NULL行但没有错误。很明显,我无法承受另一个查询来获取值的无效性,但更喜欢错误,在这种情况下,我会增加ENUM定义,如下所示,并重复查询。

ALTER TABLE `enumed` CHANGE `col` `col` ENUM( 'a', 'b', 'z' );
INSERT INTO `enumed` ( `col`) VALUES ('b');

有没有办法实现这一点,还是只是一种痛苦的方式来处理需要桌子的外国收藏?

1 个答案:

答案 0 :(得分:1)

如果启用严格SQL模式,尝试存储无效的ENUM值将报告错误。您可以检查此错误,扩展ENUM,然后重试INSERT。