第 1 章 MySQL C API

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 執行緒用戶端程式」

注意

如果升級後,您在編譯的用戶端程式中遇到問題,例如命令不同步或意外的核心傾印,則程式很可能是使用舊的標頭或程式庫檔案編譯的。在這種情況下,請檢查用於編譯的 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 個位元組。對於用戶端,與連線相關聯的緩衝區大小不會減少,直到連線關閉時,才會回收用戶端記憶體。