第 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.17libmysqlclient.so.18),则可能还需要重新编译针对共享客户端库编译的程序。有关其他兼容性信息,请参见 第 3.5 节 “运行 C API 客户端程序”

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

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

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