我的插入语句如下所示:
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
.
仅当您未提供任何值时,默认值才会接管。
这样做的方法是根本不填写该字段。只填写那些真正需要有值的。