My insert statement looks like this:
INSERT INTO foo (bar) VALUES (\'\');
The bar
field was created like so:
bar I
You're not inserting NULL
into the table; you're inserting an empty string (which apparently maps to zero as an int). Remember that NULL
is a distinct value in SQL; NULL != ''
. By specifying any value (other than NULL
), you're not inserting NULL
. The default only gets used if you don't specify a value; in your example, you specified a string value to an integer column.
MySQL by default attempts to coerce invalid values for a column to the correct type. Here, the empty string ''
is of type string, which is neither an integer nor NULL. I suggest taking the following steps:
INSERT INTO foo (bar) VALUES (NULL);
Why should it be a NULL? You're providing a value that has an integer representation: empty strings convert to INT
0
.
Only if you didn't provide any value would the default take over.
The way to do this is to not fill the field at all. only fill the ones that actually need to have a value.