當用戶端執行產生結果集的語句時,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()
,以判斷它是否具有元數據。