私の挿入ステートメントは次のようになります。
INSERT INTO foo (bar) VALUES ('');
フィールドは次のbar
ように作成されました。
bar INT(11)
COLLATION: (NULL)
NULL: YES
DEFAULT: (NULL)
MySQL バージョン: 5.1。
空の文字列に NULL を挿入するべきではありませんか? テーブルにゼロ (0) が格納されている理由がわかりません。
デフォルトでは、MySQL は列の無効な値を正しい型に変換しようとします。ここで、空の文字列''
は文字列型で、整数でも NULL でもありません。次の手順を実行することをお勧めします。
INSERT INTO foo (bar) VALUES (NULL);
NULL
テーブルに挿入していません。空の文字列を挿入しています (明らかに int としてゼロにマップされます)。NULL
これは SQL では個別の値であることを忘れないでください。NULL != ''
. 値 ( 以外NULL
) を指定しても、 は挿入されませんNULL
。デフォルトは、値を指定しない場合にのみ使用されます。あなたの例では、文字列値を整数列に指定しました。
なぜNULLにする必要があるのですか?整数表現を持つ値を提供しています。空の文字列は に変換されINT
0
ます。
値を指定しなかった場合にのみ、デフォルトが引き継がれます。
これを行う方法は、フィールドをまったく埋めないことです。実際に値を持つ必要があるものだけを埋めてください。