我想优化表中的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)
有什么方法可以实现这一目标,还是处理需要表的外部集合的痛苦方式?