我的插入语句如下所示:
INSERT INTO foo (bar) VALUES ('');
bar
字段的创建方式如下:
bar INT(11)
COLLATION: (NULL)
NULL: YES
DEFAULT: (NULL)
MySQL版本:5.1。
空字符串不应该插入NULL吗?我不知道为什么我看到表中存有零(0)。
答案 0 :(得分:12)
默认情况下,MySQL会尝试将列的无效值强制转换为正确的类型。这里,空字符串''
的类型为string,既不是整数也不是NULL。我建议采取以下步骤:
INSERT INTO foo (bar) VALUES (NULL);
答案 1 :(得分:5)
您没有在表格中插入NULL
;你正在插入一个空字符串(显然将其映射为零作为int)。请记住,NULL
是SQL中的一个独特值; NULL != ''
。通过指定任何值(NULL
除外),您不会插入NULL
。如果您未指定值,则仅使用默认值;在您的示例中,您将字符串值指定为整数列。
答案 2 :(得分:3)
为什么它应该是NULL?您提供的是具有整数表示的值:空字符串转换为INT
0
。
只有当您未提供任何值时,默认才会接管。
答案 3 :(得分:2)
这样做的方法是根本不填写场地。只填写实际需要有值的那些。