[英]Sending NULL in a prepared statement for MySQL doesn't seem to work
我正在发送要由MySQL执行的准备好的语句, 看起来我正确地遵循了协议,但是服务器始终返回:
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。
从文档 :
NULL-bitmap-bytes = (num-fields + 7 + offset) / 8
NULL-bitmap-byte = ((field-pos + offset) / 8)
NULL-bitmap-bit = ((field-pos + offset) % 8)
同样来自文档, For COM_STMT_EXECUTE this offset is 0.
您有两个字段:moment和id。 时刻为空。 moment是字段索引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;
因此null [0]为01
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.