MySQL COM_EXECUTE_STMT 失败并出现错误,但该错误没有意义

标签 mysql database networking database-connection

我正在发送 COM_EXECUTE_STMT 消息,服务器始终返回:

Error 1048 - #23000 - Column 'number_tinyint' cannot be 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 列)。据我所知,消息编码正确,但由于某种原因总是失败( at least from what the documentation says )

我在这里遗漏了什么吗?

最佳答案

从您链接的文档中:

  payload:
[ deletia ]
    n              NULL-bitmap, length: (num-params+7)/8

因此,在您的情况下有两个参数,NULL 位图的长度应为 (2+7)/8 = 1 字节,而您当前有一个 2 字节位图。

关于MySQL COM_EXECUTE_STMT 失败并出现错误,但该错误没有意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16589780/

相关文章:

mysql - 如何在SQL中显示未分配的id?

android - 在 android 中使用 mysql 的 web 服务

java - Mongodb 使用正则表达式查找查询未返回预期输出

javascript - 更新 Mongo 文档内的数组不起作用

Mysql内部连接和空精度舍入

java - 如何将 Ruby on Rails 编写的网站与 Android 应用程序连接到使用 Postgresql 的 Heroku 上托管的相同数据库

java - 在 Java 中,如何在不使用 DNS 的情况下测试网络连接?

带两个网卡的Tomcat |一个给外部用户 |其他用于与数据库连接

c++ - boost::asio::async_read 获取文件结尾错误

php - 如何在网页的不同位置显示查询记录?