我希望优化具有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');
有没有办法实现这一点,还是只是一种痛苦的方式来处理需要桌子的外国收藏?
答案 0 :(得分:1)
如果启用严格SQL模式,尝试存储无效的ENUM值将报告错误。您可以检查此错误,扩展ENUM,然后重试INSERT。