MySQL Connector/C 查询返回的数据不是原生 C 数据格式吗?
Is data returned from a MySQL Connector/C query not in native C data format?
如果我对 MySQL Connector/C 库执行查询,我得到的数据似乎都是直接 char *
格式,包括数字数据类型。
例如,如果我执行 returns 4 列的查询,所有这些都是 MySQL 中的 INTEGER
,而不是取回 4 个字节的数据(每个字节表示单个列行值),我实际上得到了 4 个 ASCII 编码字符字节,其中 1
实际上是一个带有数值 49
的字节(ASCII for 1
) .
这是准确的还是我只是遗漏了一些完整的东西?
然后我真的需要 atoi
返回字节到我的代码中的 int
还是有一种机制可以从 MySQL 客户端中获取本机 C 数据类型直接?
我想我真正的问题是:mysql_store_result
结构是否以我的应用程序代码可以绕过的方式将该数据转换为 ASCII 编码表示形式?
我相信数据是在 MySQL 协议中以文本形式在线发送的(我刚刚用 Wireshark 确认了这一点)。所以这意味着 mysql_store_result()
没有转换数据,它只是简单地传递接收到的数据。 MySQL 实际上将整数作为文本发送。我同意这对我来说也是一个奇怪的设计。
MySQL 最初仅提供 Text Protocol that you are currently using, in which (as you note) results are encoded as strings. MySQL v4.1 (released in April 2003) introduced the Prepared Statement 协议,该协议(除其他外)以二进制格式传输结果。
有关如何将后一种协议与 Connector/C 一起使用的更多信息,请参阅 C API Prepared Statements。
如果我对 MySQL Connector/C 库执行查询,我得到的数据似乎都是直接 char *
格式,包括数字数据类型。
例如,如果我执行 returns 4 列的查询,所有这些都是 MySQL 中的 INTEGER
,而不是取回 4 个字节的数据(每个字节表示单个列行值),我实际上得到了 4 个 ASCII 编码字符字节,其中 1
实际上是一个带有数值 49
的字节(ASCII for 1
) .
这是准确的还是我只是遗漏了一些完整的东西?
然后我真的需要 atoi
返回字节到我的代码中的 int
还是有一种机制可以从 MySQL 客户端中获取本机 C 数据类型直接?
我想我真正的问题是:mysql_store_result
结构是否以我的应用程序代码可以绕过的方式将该数据转换为 ASCII 编码表示形式?
我相信数据是在 MySQL 协议中以文本形式在线发送的(我刚刚用 Wireshark 确认了这一点)。所以这意味着 mysql_store_result()
没有转换数据,它只是简单地传递接收到的数据。 MySQL 实际上将整数作为文本发送。我同意这对我来说也是一个奇怪的设计。
MySQL 最初仅提供 Text Protocol that you are currently using, in which (as you note) results are encoded as strings. MySQL v4.1 (released in April 2003) introduced the Prepared Statement 协议,该协议(除其他外)以二进制格式传输结果。
有关如何将后一种协议与 Connector/C 一起使用的更多信息,请参阅 C API Prepared Statements。