MySQL:列不能为空

时间:2013-09-30 10:21:51

标签: mysql sql windows-8 odbc sql-insert

首先,我搜索了这个问题,但没有发现任何类似的情况。 所以我提供了任何帮助。

我有一张桌子:

CREATE TABLE tinypurses.purses (
  id SMALLINT(6) NOT NULL AUTO_INCREMENT,
  Time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  keyyy CHAR(100) DEFAULT NULL,
  LastSeed SMALLINT(6) NOT NULL DEFAULT 0,
  PRIMARY KEY (id),
  INDEX purses_id_index (id)
)
ENGINE = INNODB
AUTO_INCREMENT = 2
CHARACTER SET utf8
COLLATE utf8_general_ci;

当我尝试在其中插入新记录时,出现错误:

数据库错误:[MySQL] [ODBC 5.1驱动程序] [mysqld-5.1.47-community]列'LastSeed'不能为空

我很困惑,因为我明确设置了'LastSeed'列的值:

statement.prepare(connection(), "insert into purses (time, keyyy, LastSeed) values(?, ?, ?)");
statement.param(1).set_as_systemtime(sysTime);
statement.param(2).set_as_string(key);
statement.param(3).set_as_long(1);
if (!stmt.execute())
{
    LOG << statement.last_error(); // got this error here
}

此外,此代码在Windows XP和7上运行良好,但在Windows 8(使用相同版本的MySQL服务器)上运行不正常。

有没有人知道为什么它会以这种奇怪的方式运作?

谢谢。

3 个答案:

答案 0 :(得分:1)

请勿将字段名称用作“密钥”。它是mysql的关键字。

答案 1 :(得分:1)

即使您没有明确设置列LastSeed的值,在字段定义中设置DEFAULT约束(就像您一样)也应该足够了。

既然你说它适用于其他版本的Windows,并且由于错误显然无关紧要,我会研究安装的ODBC驱动程序。

答案 2 :(得分:-1)

默认情况下,Win XP上的MySQL通过Win 7在NULL值方面表现不正确,以及是否允许插入NULL值。即:在Windows上MySQL默认情况下允许将NULL值插入NOT NULL字段。 Here is why

MySQL on * nix,显然现在Win 8的行为正确。你不能在NOT NULL字段中插入'0'的原因是因为在MySQL'0'中=== NULL。

3.3.4.6. Working with NULL Values