3.6.7 Дополнительные метаданные набора результатов
Когда клиент выполняет оператор, генерирующий набор результатов, 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().
Для соединений с необязательными метаданными клиент устанавливает системную переменную, чтобы управлять тем, возвращает ли сервер метаданные набора результатов. Разрешенные значения — FULL (возвратить все метаданные) и NONE (не возвращать метаданные). Значение по умолчанию — FULL, поэтому даже для соединений с необязательными метаданными сервер по умолчанию возвращает метаданные.
Для соединений с необязательными метаданными функции mysql_fetch_field(), mysql_fetch_field_direct() и mysql_fetch_fields() возвращают NULL, когда установлено значение NONE.
Для соединений, которые не являются необязательными для метаданных, установка в значение NONE приводит к ошибке.
Чтобы проверить, имеет ли набор результатов метаданные, клиент вызывает функцию mysql_result_metadata(). Эта функция возвращает RESULTSET_METADATA_FULL или RESULTSET_METADATA_NONE, чтобы указать, что набор результатов имеет полные метаданные или не имеет метаданных соответственно.
mysql_result_metadata() полезна, если клиент заранее не знает, есть ли у набора результатов метаданные. Например, если клиент выполняет хранимую процедуру, которая возвращает несколько наборов результатов и может изменить системную переменную, клиент может вызвать mysql_result_metadata() для каждого набора результатов, чтобы определить, содержит ли он метаданные.
© 2025 Oracle
Licensed under the GPLv2 License.