1

次の問題/質問に対する正解が見つかりません。

データベースを作成しましたが、フィールドの1つがENUM型で、制限がNOTNULLです。

正常に動作しますが、このフィールドで許可されていない値のレコードを挿入しようとすると、レコードは拒否されず、フィールドが空の状態で挿入されます。つまり、NOT NULLの制限を追加したので、空の文字列( "")だと思います。

もちろん、レコード全体を却下してほしい。どうすればそれを達成できますか。

サンプルコードは常識なので必要ないと思います。

4

2 に答える 2

1

誤った値をENUM列に挿入した場合、またはIGNOREを使用して値をENUM列に強制的に挿入した場合、その値は予約済み列挙値0に設定され、文字列コンテキストで空の文字列として表示されます。

http://dev.mysql.com/doc/refman/5.1/en/constraint-enum.html

これを試して:

SET sql_mode = 'STRICT_ALL_TABLES'; or STRICT_TRANS_TABLES

テーブルがトランザクション型か非トランザクション型かによって異なります。これにより、mySQLを介して処理され、メソッドが動作を試みる前に、整合性制約を使用して中止およびロールバックする必要があります。

于 2012-06-27T15:31:41.450 に答える
0

mysql で厳密モードを有効にする必要があることがわかりました。これを行うには、次のことを行う必要があります。

  1. /etc/mysql/my.cnf を編集
  2. add/edit sql-mode = STRICT_ALL_TABLES
  3. MySQL を再起動します

これは MySQL レベルのソリューションです。ENUM フィールドに空の値を挿入しようとすると、拒否されるようになりました。

于 2012-06-27T15:33:21.783 に答える