插入零的空字符串,而不是null

时间:2011-08-02 20:28:35

标签: mysql null zero

我的插入语句如下所示:

INSERT INTO foo (bar) VALUES ('');

bar字段的创建方式如下:

bar INT(11)
    COLLATION: (NULL)
    NULL: YES
    DEFAULT: (NULL)

MySQL版本:5.1。

空字符串不应该插入NULL吗?我不知道为什么我看到表中存有零(0)。

4 个答案:

答案 0 :(得分:12)

默认情况下,MySQL会尝试将列的无效值强制转换为正确的类型。这里,空字符串''的类型为string,既不是整数也不是NULL。我建议采取以下步骤:

  1. 将查询更改为以下内容:INSERT INTO foo (bar) VALUES (NULL);
  2. 在MySQL中启用严格模式。这可以防止发生许多意外的类型和值转换。当您尝试执行MySQL不期望的操作时,您会看到更多错误消息,这有助于您更快地发现问题。

答案 1 :(得分:5)

您没有在表格中插入NULL;你正在插入一个空字符串(显然将其映射为零作为int)。请记住,NULL是SQL中的一个独特值; NULL != ''。通过指定任何值(NULL除外),您不会插入NULL。如果您未指定值,则仅使用默认值;在您的示例中,您将字符串值指定为整数列。

答案 2 :(得分:3)

为什么它应该是NULL?您提供的是具有整数表示的值:空字符串转换为INT 0

只有当您未提供任何值时,默认才会接管。

答案 3 :(得分:2)

这样做的方法是根本不填写场地。只填写实际需要有值的那些。