首先,我搜索了这个问题,但没有发现任何类似的情况。 所以我提供了任何帮助。
我有一张桌子:
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服务器)上运行不正常。
有没有人知道为什么它会以这种奇怪的方式运作?
谢谢。
答案 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。