在MySQL中自动增长ENUM

Tom*_*esp 5 mysql sql enums dynamic

我想优化表中的VARCHAR列仅包含很少的值(大多数情况下少于几十个,有时少于数百个)的值。因此,我希望将列转换为ENUMs,这是因为我无法期望值本身,因此我希望在需要时即时构建它们。

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

例如:

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

INSERT INTO `enumed` ( `col`) VALUES ('b');
INSERT INTO `enumed` ( `col`) VALUES ('z');
Run Code Online (Sandbox Code Playgroud)

将存储带有'b'NULL没有错误的行。显然,我无法提供其他查询来获取值的空值,但会选择一个错误,在这种情况下,我将ENUM像下面那样扩展定义并重复查询。

ALTER TABLE `enumed` CHANGE `col` `col` ENUM( 'a', 'b', 'z' );
INSERT INTO `enumed` ( `col`) VALUES ('b');
Run Code Online (Sandbox Code Playgroud)

有什么方法可以实现这一目标,还是处理需要表的外部集合的痛苦方式?

Bar*_*mar 1

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