当客户端执行生成结果集的语句时,MySQL 提供结果集包含的数据,默认情况下还提供提供有关结果集数据信息的结果集元数据。元数据包含在
MYSQL_FIELD
结构中(参见
第 5.2 节“C API 基本数据结构”),它由mysql_fetch_field()
、
mysql_fetch_field_direct()
和
mysql_fetch_fields()
函数返回。
客户端可以在每个连接的基础上指示结果集元数据是可选的,并且客户端将指示服务器是否返回它。客户端抑制元数据传输可以提高性能,特别是对于执行许多查询但每个查询返回几行的会话。
客户端有两种方式指示结果集元数据对于连接是可选的。它们是等价的,所以其中一个就足够了:
在连接时间之前,启用
MYSQL_OPT_OPTIONAL_RESULTSET_METADATA
选项mysql_options()
。在连接时,启用 参数 的
CLIENT_OPTIONAL_RESULTSET_METADATA
标志。client_flag
mysql_real_connect()
对于元数据可选连接,客户端设置
resultset_metadata
系统变量来控制服务器是否返回结果集元数据。允许的值为FULL
(返回所有元数据)和NONE
(不返回任何元数据)。默认值为FULL
,因此即使对于元数据可选连接,服务器也默认返回元数据。
对于元数据可选连接,
mysql_fetch_field()
、
mysql_fetch_field_direct()
和
mysql_fetch_fields()
函数在设置为
NULL
时
返回。
resultset_metadata
NONE
对于非元数据可选的连接,设置
resultset_metadata
为
NONE
会产生错误。
要检查结果集是否具有元数据,客户端会调用该
mysql_result_metadata()
函数。此函数返回
RESULTSET_METADATA_FULL
or
RESULTSET_METADATA_NONE
以分别指示结果集具有完整元数据或没有元数据。
mysql_result_metadata()
如果客户端事先不知道结果集是否有元数据,则很有用。例如,如果客户端执行返回多个结果集并可能更改
resultset_metadata
系统变量的存储过程,则客户端可以调用
mysql_result_metadata()
每个结果集以确定它是否具有元数据。