从MySQL Connector / C查询返回的数据是否不是本机C数据格式?

时间:2016-07-15 14:54:23

标签: mysql c mysql-connector

如果我对MySQL Connector / C库执行查询,我收到的所有数据都显示为直接char *格式,包括数字数据类型。

例如,如果我执行一个返回4列的查询,所有这些列都是MySQL中的INTEGER,而不是返回4个字节的数据(每个字节代表一个列的行值),我' m实际上返回4个ASCII编码字符字节,其中1实际上是一个字节,其中包含数值491的ASCII)。

这是准确的还是我错过了一些完整的东西?

我真的需要atoi在我的代码中将字节返回到int,还是有机制直接从MySQL客户端获取本机C数据类型?

我想我的真正问题是:mysql_store_result结构是否以我的应用程序代码可以绕过的方式将数据转换为ASCII编码表示?

2 个答案:

答案 0 :(得分:1)

我相信数据是作为MySQL协议中的文本在线上发送的(我刚用Wireshark确认了这一点)。这意味着mysql_store_result()不会转换数据,它只是简单地传递数据。 MySQL实际上将整数作为文本发送。我同意这对我来说似乎也是一个奇怪的设计。

答案 1 :(得分:1)

MySQL最初只提供您当前使用的Text Protocol,其中(如您所知)结果被编码为字符串。 MySQL v4.1(2003年4月发布)引入了Prepared Statement协议,其中(以及其他)以二进制格式传输结果。

有关如何将后一种协议与Connector / C一起使用的详细信息,请参阅C API Prepared Statements