私のinsert文は次のようになります。空の文字列は、NOT NULL
INSERT INTO foo (bar) VALUES ('');
bar
フィールドがそうのように作成されました:
bar INT(11)
COLLATION: (NULL)
NULL: YES
DEFAULT: (NULL)
MySQLバージョン:5.1。
NULLを挿入しないでください。なぜ私はテーブルにゼロ(0)が格納されているのか分かりません。
私のinsert文は次のようになります。空の文字列は、NOT NULL
INSERT INTO foo (bar) VALUES ('');
bar
フィールドがそうのように作成されました:
bar INT(11)
COLLATION: (NULL)
NULL: YES
DEFAULT: (NULL)
MySQLバージョン:5.1。
NULLを挿入しないでください。なぜ私はテーブルにゼロ(0)が格納されているのか分かりません。
デフォルトでは、MySQLは、カラムの無効な値を正しいタイプに強制しようとします。ここで空文字列''
はstring型で、整数でもNULLでもありません。
INSERT INTO foo (bar) VALUES (NULL);
#2は多くを説明しています。ありがとうございました。 – gravyface
厳密なモードは非常に重要です。 Mysqlのデフォルトは、データが荒れています。開発者として、実際にデータを切り捨てて、それを認識したくないのですか?ああ。 –
NULL
をテーブルに挿入していません。空の文字列を挿入しています(これは明らかにゼロとしてintにマップされます)。 NULL
はSQLの別の値であることに注意してください。 NULL != ''
。任意の値(NULL
以外)を指定すると、NULL
は挿入されません。値を指定しないと、デフォルト値が使用されます。あなたの例では、整数列に文字列値を指定しました。
これを行う方法は、フィールドをまったく埋めることではありません。実際に価値を持つ必要のあるものだけを埋めてください。
なぜNULLにする必要がありますか?整数表現の値を指定しています。空の文字列はINT
0
に変換されます。
を指定しなかった場合のみ、の値がデフォルト引き継ぎます。
mysqlの "strict mode" –