0

COM_EXECUTE_STMT メッセージを送信していますが、サーバーは常に次のメッセージを返します。

エラー 1048 - #23000 - 列 'number_tinyint' を null にすることはできません

クエリは次のようになります。

insert into numbers (
number_tinyint,
number_smallint,
number_mediumint,
number_int,
number_bigint,
number_decimal,
number_float,
number_double
) values
(
?, 679, 778, 875468, 100007654, 198.657809, 432.8, ?)

そして、私が送信するものは次のとおりです。

0: 18 00 00 00 17 01 00 00     . . . . . . . .
1: 00 00 01 00 00 00 00 00     . . . . . . . .
2: 01 01 05 0a 29 5c 8f c2     . . . . ) \ . .
3: f5 b0 58 40                 . . X @

読みやすいように簡略化されています。

18 00 00 - size
00 - sequence
17 - type
01 00 00 00 - statement id
00 - flags
01 00 00 00 - iteration-count
00 00 - null bitmap
01 - new params bound flag
01 - byte type
05 - double type
0a - byte value - 10
29 5c 8f c2 f5 b0 58 40 - double value

ステートメント パラメーターは 10 (tinyint 列の場合) と 98.765 (double 列の場合) です。メッセージは正しくエンコードされていることがわかりますが、何らかの理由で常に失敗します(少なくともドキュメントの内容から

ここで何かが足りないのですか?

4

1 に答える 1

1

リンク先のドキュメントから:

  ペイロード:
【デレティア】
    n NULL ビットマップ、長さ: (num-params+7)/8

したがって、あなたのケースでは 2 つのパラメーターを使用すると、NULL ビットマップの長さは (2+7)/8 = 1 バイトになりますが、現在は 2 バイトのビットマップを持っています。

于 2013-05-16T14:38:39.543 に答える