gpt4 book ai didi

java - 在 MySQL 的准备语句中发送 NULL 似乎不起作用

转载 作者:行者123 更新时间:2023-11-29 13:50:40 25 4
gpt4 key购买 nike

我正在发送一条由 MySQL 执行的准备好的语句,并且 it looks like I'm following the protocol correctly但服务器总是返回:

Error 1210 - #HY000 - Incorrect arguments to mysqld_stmt_execute

消息字节编码如下:

14 00 00    - size
00 - sequence
17 - message type
01 00 00 00 - statement id
00 - flags
01 00 00 00 - iteration count
80 - NULL bitmap (1000-0000)
01 - new params bound flag
06 00 - NULL type
03 00 - INT type
0a 00 00 00 - 10 INT value

所以我无法真正理解此消息与 MySQL 期望的内容有何不同,而且看起来我无法让 MySQL 向我解释这一点。

发送到服务器的SQL语句为:

CREATE TEMPORARY TABLE timestamps ( id INT NOT NULL, moment TIMESTAMP, primary key (id));
INSERT INTO timestamps (moment, id) VALUES (?, ?);

对此表示感谢。

最佳答案

您的空位图是错误的。应该是 01 而不是 80。

From the doc :

NULL-bitmap-bytes = (num-fields + 7 + offset) / 8
NULL-bitmap-byte = ((field-pos + offset) / 8)
NULL-bitmap-bit = ((field-pos + offset) % 8)

同样来自文档,对于 COM_STMT_EXECUTE,此偏移量为 0。

您有两个字段:moment 和 id。时刻为空。时刻是字段索引 0。

NULL-bitmap-bytes = (num-fields + 7 + offset) / 8
-> (2 + 7 + 0) / 8
== 1

NULL-bitmap-byte = ((field-pos + offset) / 8)
-> ((0 + 0) / 8)
== 0

NULL-bitmap-bit = ((field-pos + offset) % 8)
-> ((0 + 0) % 8)
== 0

因此,Null 位掩码为 1 个字节,要设置字段 0 的位,我们需要执行以下操作:

nulls[byte_pos] |= 1 << bit_pos

在你的情况下是

nulls[0] |= 1 << 0;

因此 nulls[0] 是 01

关于java - 在 MySQL 的准备语句中发送 NULL 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16726752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com