1

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

我有一张桌子:

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 Driver][mysqld-5.1.47-community]Column '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 服务器)上无法正常工作。

有人知道为什么它会以如此奇怪的方式工作吗?

谢谢你。

4

3 回答 3

2

不要将字段名称用作“键”。它是mysql的关键字。

于 2013-09-30T10:30:10.457 回答
2

即使您没有为 column 显式设置值,在字段定义中LastSeed设置DEFAULT约束(如您所做的那样)就足够了。

既然你说它可以在其他版本的 Windows 上运行,并且由于错误显然无关紧要,我会调查安装的 ODBC 驱动程序。

于 2013-09-30T10:36:36.090 回答
-1

默认情况下,Win XP 到 Win 7 上的 MySQL 在 NULL 值以及是否允许插入 NULL 值方面表现不正确。即:默认情况下,在 Windows MySQL 上将允许将 NULL 值插入 NOT NULL 字段。 这就是为什么

*nix 上的 MySQL 显然现在 Win 8 运行正常。您不能在 NOT NULL 字段中插入“0”的原因是因为在 MySQL 中“0”=== NULL。

3.3.4.6。使用 NULL 值

于 2014-02-18T22:35:43.877 回答