- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在开发基于 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/
我是一名优秀的程序员,十分优秀!