5

我想优化具有VARCHAR仅计数的列的表 - 大多数时间少于十个,有时是数百个 - 不同的值。所以我希望将列转换为ENUMs,关键是我无法预测值本身,所以我希望在必要时即时构建它们。

不幸的是,似乎 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');

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

4

1 回答 1

1

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

于 2012-07-18T02:35:40.730 回答