10

私の挿入ステートメントは次のようになります。

INSERT INTO foo (bar) VALUES ('');

フィールドは次のbarように作成されました。

bar INT(11)
    COLLATION: (NULL)
    NULL: YES
    DEFAULT: (NULL)

MySQL バージョン: 5.1。

空の文字列に NULL を挿入するべきではありませんか? テーブルにゼロ (0) が格納されている理由がわかりません。

4

4 に答える 4

12

デフォルトでは、MySQL は列の無効な値を正しい型に変換しようとします。ここで、空の文字列''は文字列型で、整数でも NULL でもありません。次の手順を実行することをお勧めします。

  1. クエリを次のように変更します。INSERT INTO foo (bar) VALUES (NULL);
  2. MySQL で厳密モードを有効にします。これにより、予期しない型と値の変換が多く発生するのを防ぐことができます。MySQL が想定していないことをしようとすると、より多くのエラー メッセージが表示されるため、問題をより迅速に特定するのに役立ちます。
于 2011-08-02T20:38:25.247 に答える
6

NULLテーブルに挿入していません。空の文字列を挿入しています (明らかに int としてゼロにマップされます)。NULLこれは SQL では個別の値であることを忘れないでください。NULL != ''. 値 ( 以外NULL) を指定しても、 は挿入されませんNULL。デフォルトは、値を指定しない場合にのみ使用されます。あなたの例では、文字列値を整数列に指定しました。

于 2011-08-02T20:30:55.440 に答える
3

なぜNULLにする必要があるのですか?整数表現を持つ値を提供しています。空の文字列は に変換されINT 0ます。

値を指定しなかった場合にのみ、デフォルトが引き継がれます

于 2011-08-02T20:33:45.427 に答える
2

これを行う方法は、フィールドをまったく埋めないことです。実際に値を持つ必要があるものだけを埋めてください。

于 2011-08-02T20:31:28.087 に答える