gpt4 book ai didi

MySQL。如何向mysql-server发送长数据?

转载 作者:行者123 更新时间:2023-11-29 15:46:48 24 4
gpt4 key购买 nike

我目前正在开发基于 NodeJS 的 MySQL 客户端。请不要问为什么,这只是我做事的方式。

到目前为止,它运行得很好,但我真的对将大量数据发送到准备好的语句的方式感到困惑。

如果我尝试使用 stmt_execute 命令发送所有数据,很明显,它表明包太长。 MySQL协议(protocol)文档建议在这种情况下使用COM_STMT_SEND_LONG_DATA,但是几乎没有关于如何正确使用它的信息,只有包描述。

https://dev.mysql.com/doc/internals/en/com-stmt-send-long-data.html

虽然这些数据包是在 STMT_EXECUTE 之前发送的,但我正在发送 SID 00、01 的长数据,然后执行 SID 02 的数据包。服务器不喜欢它,提示“数据包乱序”。好吧,然后我尝试对所有数据包使用 SID 00,服务器接受它。

但是还有一个问题。如果我将其作为长数据发送,是否应该将其从执行数据包中排除?或者我应该用一些占位符替换它?从 STMT_EXECUTE 数据包中排除值后,服务器提示“mysqld_stmt_execute 的参数不正确”。

我尝试查看其他一些 mysql 客户端的源代码,但没有成功。

例如,官方的nodejs/mysql客户端根本不支持准备好的语句。

任何人都可以帮忙解决吗?

几个小时后,我将尝试上传我的源代码,如果它会有所作为的话。

最佳答案

感觉就像我找到了解决方案......有点。

发送所有长数据包后,我应该发送所需参数为空值的执行命令,而不仅仅是将其从列表中排除。它将连接所有先前发送的数据包并在结果末尾附加空值。

听起来有点迷,但据我所知,它确实有效(尽管尝试了 16 字节消息,按 5 字节分割)。

这是我当前的解决方案。我创建了一个发送长数据的函数,将其分成数据包。 https://github.com/MadBrozzeR/mysql/blob/master/operations/sendLongData.js

到目前为止,这感觉是最好的(也是唯一的)解决方案。

关于MySQL。如何向mysql-server发送长数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56967211/

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