3

列挙型フィールドが無効な値に設定されている場合にMySQLをデフォルトでNULLにする方法はありますか?

また、DBに保存されたときにNULLとして格納されるように、HTMLフォームで値を指定する方法はありますか。「文字列が空の場合は、NULLを保存する」などのチェックは行いたくありません。可能であれば、それは良い考えですか?セキュリティ上の懸念はありますか?

私のシナリオ:「null」オプションの後にDBの列挙型に対応する項目のリストが続くHTMLドロップダウンメニューがあります。nullオプションを選択して保存すると、DBにNULLとして反映されるようにします。現在、次のように空の文字列に変換されています。

ENUMに無効な値(つまり、許可された値のリストに存在しない文字列)を挿入すると、代わりに空の文字列が特別なエラー値として挿入されます。この文字列の数値が0であるという事実により、この文字列は「通常の」空の文字列と区別できます。

http://dev.mysql.com/doc/refman/5.5/en/enum.html

4

1 に答える 1

7

" ENUM 列が NULL を許可するように宣言されている場合、NULL 値は列の有効な値であり、デフォルト値は NULL です。ENUM 列が NOT NULL と宣言されている場合、そのデフォルト値は、許可されているリストの最初の要素です。値。

これに基づいて、INSERT ステートメントでフィールドの値を設定せず、ENUM フィールドが NULL を受け入れると宣言した場合、デフォルトで NULL になります。

[編集]

このテーブル定義がある場合、コメントに対処するには

CREATE TABLE IF NOT EXISTS `tbl_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `type` enum('New','Done') DEFAULT NULL,
  PRIMARY KEY (`id`)
)

そして、あなたのWebアプリケーションは、このようなものを使用してUPDATEと既存のレコードを試みています

UPDATE `test`.`tbl_test` SET `type` = NULL WHERE `tbl_test`.`id` =1

値を NULL に設定します。

無効な列挙型データが HMTL ドロップダウンに表示されるリスクを軽減するには、ドロップダウンに表示する可能性のある ENUM 値をテーブルに照会します。これが私が見つけたPHPの例です

SHOW COLUMNS FROM `tbl_test` WHERE Field = 'type'

[編集]

追加のコメントに答えるには、ユーザーが NULL 値を選択できるようにし、空の文字列を有効な値として許可する場合は、次のようにドロップダウンを指定する必要があります

<select>
  <option value="-1">-- not selected ---</option>
  <option value=""></option>
  <option value="Book">Book</option>
  <option value="Music">Music</option>
</select>

属性を使用する<option value= ...>ことで、WebApp に POST される値を制御し、それに応じて処理できます。この例では、値は-1WebApp によって NULL に変換されます

于 2012-05-15T13:10:08.947 に答える