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

gra*_*ace 9 mysql null zero

我的insert语句如下所示:

INSERT INTO foo (bar) VALUES ('');
Run Code Online (Sandbox Code Playgroud)

bar字段的创建方式如下:

bar INT(11)
    COLLATION: (NULL)
    NULL: YES
    DEFAULT: (NULL)
Run Code Online (Sandbox Code Playgroud)

MySQL版本:5.1.

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

Ham*_*ite 12

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

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


Pau*_*ier 6

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

  • 仅当您未提供值时,列的默认值才有意义.这里提供了一个值,但是它无效,因此MySQL会尝试将其解释为整数.它到达的解释是整数0. (3认同)