2

MySQL データベースを PostgreSQL に変換したいと考えています。

MySQL では、ENUM データ型はデフォルトで空のフィールドを許可しますが、これは PostgreSQL では機能しないようです。したがって、PostgreSQL で VARCHAR から ENUM にキャストできません。これは、データベースに PgSQL で許可されていない空のフィールドがたくさんあるためです。

どうすればいいですか?NULL を許可し、空のフィールドを NULL に設定しますか? 型を作成するときに PostgreSQL の ENUM に空の値を追加します (ENUM('A','B','C','') のようなもの) ? この見苦しく不調和な ENUM データ型の使用をやめますか (代わりに varchar の制約を使用するか、別のテーブルと外部キーを使用します) ?

ありがとうございました :)

ユーザー1527491

4

1 に答える 1

4

列挙型に実際に空の文字列値が必要な場合は、型を作成するときにそれらを列挙型に追加する必要があります。空の文字列を明示的に許可しない列挙型に空の文字列を受け入れるデータベースはバグであり、アプリケーションがそれに依存している場合、それもバグです:)

「不明」を意味するという考えであれば、NULL を使用することも良い選択です。純粋なモデルの観点からは、おそらくよりクリーンなモデルです。

明らかに異なる値である場合、一部のデータベースとシステムが null と空の文字列を同じものと見なすという古典的な問題に帰着します。

于 2013-08-17T16:20:24.910 に答える