突然消失するかもしれないブログ

”とつきえブログ”

MySQLのNOT NULL制約のフィールドにNULL値を入れてもエラーにならない

SQLでのNULL値とは、例えば、文字列型だと空文字列(””)とは異なる特別な値のことです。

MySQLでは、NOT NULL制約のフィールドにNULL値を入れるSQL文を実行してもエラーになりません。

では、文字列型にNULL値を入れると、なんと自動的に空文字列(””)に変換されて挿入されてしまうのです。はまりました。

で、ググるとこういうことだったんですね。

MySQLのNOT NULL制約のフィールドにはNULL突っ込んでもエラーにならない

MySQLではNOT NULLなどの制約をかけているフィールドに対してNULLをinsertすると、それがint型のフィールドであれば0、char型のフィールドであれば”(空文字)にされてinsertされる。これを

無効値の制約というらしい。制約に外れると勝手にデフォルト値を入れられるわけね。

NOT NULLの他にも、例えばchar(4)のフィールドに’12345’の文字列をinsertすると’1234’となって格納される。

で、回避策は、以下の通り。

my.cnfに以下の設定を行う。
[mysqld]
sql-mode="STRICT_ALL_TABLES"

 

それとSQL文でNULL値を扱う場合は注意が必要。

以下の例ではNULL値ではなく、NULLという文字列が挿入されます。コーテーションで囲っていると文字列として扱われてしまう。

insert into test (field1) values (NULL);

なので、NULLを挿入したければ、コーテーションをつけないようにしないといけない。

insert into test (field1) values (NULL);

 

MySQLのNOT NULL制約のフィールドにNULL値を入れてもエラーにならない」への1件のフィードバック

  1. うさみ 9月 29, 2010 5:34 pm

    ありがとうございました

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。