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(),以判斷它是否具有元數據。