3.6.7 可選的結果集元數據

當用戶端執行產生結果集的語句時,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_FULLRESULTSET_METADATA_NONE,分別表示結果集具有完整元數據或沒有元數據。

如果用戶端事先不知道結果集是否具有元數據,mysql_result_metadata() 會很有用。例如,如果用戶端執行傳回多個結果集的預存程序,並且可能會變更 resultset_metadata 系統變數,則用戶端可以針對每個結果集呼叫 mysql_result_metadata(),以判斷其是否具有元數據。