如果我对MySQL Connector / C库执行查询,我收到的所有数据都显示为直接char *
格式,包括数字数据类型。
例如,如果我执行一个返回4列的查询,所有这些列都是MySQL中的INTEGER
,而不是返回4个字节的数据(每个字节代表一个列的行值),我' m实际上返回4个ASCII编码字符字节,其中1
实际上是一个字节,其中包含数值49
(1
的ASCII)。
这是准确的还是我错过了一些完整的东西?
我真的需要atoi
在我的代码中将字节返回到int
,还是有机制直接从MySQL客户端获取本机C数据类型?
我想我的真正问题是:mysql_store_result
结构是否以我的应用程序代码可以绕过的方式将数据转换为ASCII编码表示?
答案 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。