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 ドライバー][mysqld-5.1.47-community]列 'LastSeed' を null にすることはできません

列「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

column の値を明示的に設定しなかった場合でも、フィールド定義に制約をLastSeed設定するだけで十分です。DEFAULT

他のバージョンの Windows でも動作するとおっしゃっていますが、エラーは明らかに無関係なので、インストールされている ODBC ドライバーを調査します。

于 2013-09-30T10:36:36.090 に答える
2

フィールド名を "key" として使用しないでください。mysqlのキーワードです。

于 2013-09-30T10:30:10.457 に答える