5

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');

これを達成する方法はありますか、それともテーブルを必要とする外国のコレクションを処理するための苦痛な方法ですか?

4

1 に答える 1

1

厳密なSQLモードを有効にすると、無効なENUM値を格納しようとするとエラーが報告されます。このエラーを確認し、ENUMを拡張して、INSERTを再試行できます。

于 2012-07-18T02:35:40.730 に答える