VARCHAR
数が少ない列(ほとんどの場合、数十、場合によっては数百)の異なる値を持つテーブルを最適化したいと思います。したがって、列をsに変換したいENUM
のですが、ポイントは、値自体を予測できないということです。したがって、必要に応じて、その場で列を作成したいと思います。
残念ながら、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');
これを達成する方法はありますか、それともテーブルを必要とする外国のコレクションを処理するための苦痛な方法ですか?