C API 提供對 MySQL 用戶端/伺服器協定的低階存取,並使 C 程式能夠存取資料庫內容。C API 程式碼與 MySQL 一起發佈,並在 libmysqlclient
程式庫中實作。請參閱第 2 章,MySQL C API 實作。
大多數其他用戶端 API 使用 libmysqlclient
程式庫與 MySQL 伺服器通訊。(例外情況是 Connector/J 和 Connector/NET。)這表示,例如,您可以利用其他用戶端程式使用的許多相同環境變數,因為它們是從程式庫中參考的。如需這些變數的清單,請參閱MySQL 程式概述。
如需使用 C API 建置用戶端程式的指示,請參閱第 3.2 節,「建置 C API 用戶端程式」。如需使用執行緒進行程式設計,請參閱第 3.4 節,「撰寫 C API 執行緒用戶端程式」。
如果在升級後,您在已編譯的用戶端程式中遇到問題,例如 Commands out of sync
或意外的核心傾印,則這些程式可能是使用舊的標頭或程式庫檔案編譯的。在這種情況下,請檢查用於編譯的 mysql.h
檔案和 libmysqlclient.a
程式庫的日期,以確認它們來自新的 MySQL 發行版本。如果不是,請使用新的標頭和程式庫重新編譯程式。如果程式庫的主要版本號已變更(例如,從 libmysqlclient.so.17
變更為 libmysqlclient.so.18
),則針對共用用戶端程式庫編譯的程式也可能需要重新編譯。如需其他相容性資訊,請參閱第 3.5 節,「執行 C API 用戶端程式」。
用戶端具有最大通訊緩衝區大小。最初配置的緩衝區大小 (16KB) 會自動增加到最大大小 (預設為 16MB)。由於緩衝區大小僅在需求允許的情況下才會增加,因此僅增加最大限制本身並不會導致使用更多資源。此大小檢查主要是一種預防錯誤陳述和通訊封包的措施。
通訊緩衝區必須夠大才能包含單一 SQL 陳述式(用於用戶端到伺服器的流量)和一列傳回的資料(用於伺服器到用戶端的流量)。每個工作階段的通訊緩衝區都會動態擴大,以處理任何查詢或最大限制的列。例如,如果您有包含高達 16MB 資料的 BLOB
值,則必須在伺服器和用戶端中都至少具有 16MB 的通訊緩衝區限制。內建於用戶端程式庫中的預設最大值為 1GB,但伺服器中的預設最大值為 1MB。您可以透過在伺服器啟動時變更 max_allowed_packet
參數的值來增加此值。請參閱設定伺服器。
MySQL 伺服器會在每次查詢後將每個通訊緩衝區縮減為 net_buffer_length
位元組。對於用戶端,與連線關聯的緩衝區大小在連線關閉之前不會減少,屆時會回收用戶端記憶體。