10

我的插入语句如下所示:

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

bar字段是这样创建的:

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

MySQL 版本:5.1。

空字符串不应该插入NULL吗?我不确定为什么我看到表中存储了一个零 (0)。

4

4 回答 4

12

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

  1. 将查询更改为以下内容:INSERT INTO foo (bar) VALUES (NULL);
  2. 在 MySQL 中启用严格模式。这可以防止发生尽可能多的意外类型和值转换。当您尝试执行 MySQL 未预料到的事情时,您将看到更多错误消息,这有助于您更快地发现问题。
于 2011-08-02T20:38:25.247 回答
6

您没有插入NULL表格;您正在插入一个空字符串(显然作为 int 映射到零)。请记住,这NULL是 SQL 中的不同值;NULL != ''. 通过指定任何值(除了NULL),您不会插入NULL. 仅当您未指定值时才使用默认值;在您的示例中,您为整数列指定了一个字符串值。

于 2011-08-02T20:30:55.440 回答
3

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

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

于 2011-08-02T20:33:45.427 回答
2

这样做的方法是根本不填写该字段。只填写那些真正需要有值的。

于 2011-08-02T20:31:28.087 回答