Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从MySQL连接器/C查询返回的数据是否不是本机C数据格式?_Mysql_C_Mysql Connector - Fatal编程技术网

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

从MySQL连接器/C查询返回的数据是否不是本机C数据格式?,mysql,c,mysql-connector,Mysql,C,Mysql Connector,如果我对MySQL Connector/C库执行查询,我要返回的数据都是纯char*格式,包括数字数据类型 例如,如果我执行一个查询,返回4列,所有列在MySQL中都是INTEGER,而不是返回4个字节的数据(每个字节代表一个列行值),我实际上返回4个ASCII编码字符字节,其中1实际上是一个包含数值49的字节(ASCII表示1) 这是准确的还是我遗漏了一些完整的东西 我真的需要在我的代码中将字节返回到int中吗?还是有一种机制可以直接从MySQL客户端获取原生C数据类型 我想我真正的问题是:m

如果我对MySQL Connector/C库执行查询,我要返回的数据都是纯
char*
格式,包括数字数据类型

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

这是准确的还是我遗漏了一些完整的东西

我真的需要在我的代码中将字节返回到
int
中吗?还是有一种机制可以直接从MySQL客户端获取原生C数据类型


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

我相信数据是以mysql协议中的文本形式在网上发送的(我刚刚与Wireshark确认了这一点)。这意味着
mysql\u store\u result()
不是转换数据,它只是在接收数据时传递数据。MySQL实际上将整数作为文本发送。我同意这对我来说也是一个奇怪的设计。

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


有关如何在Connector/C中使用后一种协议的更多信息,请参阅。

mysql INT是32位的。对于4整数,您应该返回16字节的数据。您使用的某些工具导致您无法理解结果。你到底是怎么“回来的”我肯定不是。将以8字节字符串(ASCII=49,48,48,48,48,48,48,48,48,0)的形式返回一个数字“`1000000”-7字节作为数字,然后返回一个空字节。mysql\u store\u result()后跟mysql\u fetch\u row()。由此产生的MYSQL_行结构,在C中,就是给出这个结果的原因。我们不可能像现在这样回答这个问题,因为我们不清楚你到底在做什么。这就是a派上用场的地方。是的,令人困惑。我花了一个小时才发现“49”不是一个错误,我需要将该字节返回int=1。看起来,如果您使用准备好的语句,MySQL将切换到二进制协议进行数据编码,但是如果您的连接器/C代码从堆栈的更高层获取任意SQL,那么这并没有多大帮助。