當用戶端執行產生結果集的語句時,MySQL 會提供結果集包含的資料,預設情況下還會提供結果集元數據,其中提供有關結果集資料的資訊。元數據包含在 MYSQL_FIELD
結構中(請參閱 第 5.2 節,「C API 基本資料結構」),該結構由 mysql_fetch_field()
、 mysql_fetch_field_direct()
和 mysql_fetch_fields()
函數傳回。
用戶端可以根據每個連線指出結果集元數據是可選的,並且用戶端將向伺服器指示是否傳回。用戶端抑制元數據傳輸可以提高效能,特別是對於執行許多查詢,而每個查詢僅傳回少量列的會話。
用戶端有兩種方式可以指出連線的結果集元數據是可選的。它們是等效的,因此任一方式都足夠
在連線時間之前,為
mysql_options()
啟用MYSQL_OPT_OPTIONAL_RESULTSET_METADATA
選項。在連線時間時,為
mysql_real_connect()
的client_flag
引數啟用CLIENT_OPTIONAL_RESULTSET_METADATA
旗標。
對於元數據可選的連線,用戶端會設定 resultset_metadata
系統變數,以控制伺服器是否傳回結果集元數據。允許的值為 FULL
(傳回所有元數據)和 NONE
(不傳回元數據)。預設值為 FULL
,因此即使對於元數據可選的連線,伺服器預設也會傳回元數據。
對於元數據可選的連線,當 resultset_metadata
設定為 NONE
時,mysql_fetch_field()
、 mysql_fetch_field_direct()
和 mysql_fetch_fields()
函數會傳回 NULL
。
對於不是元數據可選的連線,將 resultset_metadata
設定為 NONE
會產生錯誤。
若要檢查結果集是否具有元數據,用戶端會呼叫 mysql_result_metadata()
函數。此函數會傳回 RESULTSET_METADATA_FULL
或 RESULTSET_METADATA_NONE
,分別表示結果集具有完整元數據或沒有元數據。
如果用戶端事先不知道結果集是否具有元數據,mysql_result_metadata()
會很有用。例如,如果用戶端執行傳回多個結果集的預存程序,並且可能會變更 resultset_metadata
系統變數,則用戶端可以針對每個結果集呼叫 mysql_result_metadata()
,以判斷其是否具有元數據。