27.7 MySQL C API

C API 提供对 MySQLClient 端/服务器协议的低级访问,并使 C 程序可以访问数据库内容。 C API 代码随 MySQL 一起分发,并在libmysqlclient库中实现。参见第 27.7.1 节“ MySQL C API 实现”

大多数其他 Client 端 API 使用libmysqlclient库与 MySQL 服务器通信。 (Connector/J 和 Connector/NET 是 exception.)例如,这意味着您可以利用其他 Client 端程序使用的许多相同环境变量,因为它们是从库中引用的。有关这些变量的列 table,请参见第 4.1 节“ MySQL 程序概述”

有关使用 C API 构建 Client 端程序的说明,请参见第 27.7.3.1 节“构建 C APIClient 端程序”。有关使用线程进行编程的信息,请参见第 27.7.3.3 节“编写 C API 线程 Client 端程序”。要创建在同一程序中包含“服务器”和“Client 端”的独立应用程序(并且不与外部 MySQL 服务器通信),请参见第 27.6 节“ libmysqld,嵌入式 MySQL 服务器库”

Note

如果升级后遇到编译的 Client 端程序问题,例如Commands out of sync或意外的核心转储,则这些程序可能是使用旧的头文件或库文件编译的。在这种情况下,请检查用于编译的mysql.h文件和libmysqlclient.a库的日期,以验证它们是否来自新的 MySQL 发行版。如果不是,请使用新的头文件和库重新编译程序。如果库主要版本号已更改(例如,从libmysqlclient.so.17libmysqlclient.so.18),则对于针对共享 Client 端库编译的程序,也可能需要重新编译。有关其他兼容性信息,请参见第 27.7.3.4 节“运行 C APIClient 端程序”

Client 端具有最大的通信缓冲区大小。最初分配的缓冲区大小(16KB)将自动增加到最大大小(默认为 16MB)。因为仅在需要时才增加缓冲区大小,所以仅增加最大限制本身并不会导致使用更多资源。这种大小检查主要是为了防止错误的语句和通信数据包。

通信缓冲区必须足够大,以包含一个 SQL 语句(用于 Client 端到服务器的流量)和一行返回的数据(用于服务器到 Client 端的流量)。每个会话的通信缓冲区都会动态扩展,以处理任何查询或行,直到最大限制。例如,如果您的BLOB值包含最多 16MB 的数据,则通信缓冲区的限制必须至少为 16MB(在服务器和 Client 端中)。Client 端库中内置的默认最大值为 1GB,但是服务器中的默认最大值为 1MB。您可以通过在服务器启动时更改max_allowed_packet参数的值来增加此值。参见第 5.1.1 节“配置服务器”

在每次查询后,MySQL 服务器会将每个通信缓冲区缩小到net_buffer_length个字节。对于 Client 端,与连接关联的缓冲区的大小不会减小,直到关闭连接为止,此时将回收 Client 端内存。