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 服务器通信)的独立应用程序,请参阅libmysqld,嵌入式 MySQL 服务器库。
如果在升级后,您在编译客户端程序时遇到问题,例如Commands out of sync
意外的核心转储,则这些程序可能是使用旧的头文件或库文件编译的。在这种情况下,检查用于编译的mysql.h
文件和
libmysqlclient.a
库的日期以验证它们来自新的 MySQL 发行版。如果不是,请使用新的头文件和库重新编译程序。libmysqlclient.so.17
如果库的主要版本号已更改(例如,从到
libmysqlclient.so.18
),则针对共享客户端库编译的程序也可能需要重新编译
。有关其他兼容性信息,请参阅
第 3.5 节“运行 C API 客户端程序”.
客户端具有最大通信缓冲区大小。最初分配的缓冲区大小 (16KB) 会自动增加到最大大小(默认为 16MB)。因为缓冲区大小仅在需要时增加,所以简单地增加最大限制本身不会导致使用更多资源。这种大小检查主要是为了防止错误的语句和通信数据包。
通信缓冲区必须足够大以包含单个 SQL 语句(用于客户端到服务器的流量)和一行返回的数据(用于服务器到客户端的流量)。每个会话的通信缓冲区都会动态扩大,以处理任何查询或行,直至达到最大限制。例如,如果您的
BLOB
值最多包含 16MB 的数据,则通信缓冲区限制必须至少为 16MB(在服务器和客户端中)。客户端库中内置的默认最大值为 1GB,但服务器中的默认最大值为 1MB。max_allowed_packet
您可以通过在服务器启动时更改参数值来增加此值
。请参阅配置服务器。
MySQL 服务器在每次查询后将每个通信缓冲区缩小为
net_buffer_length
字节。对于客户端,与连接关联的缓冲区的大小在连接关闭之前不会减少,此时客户端内存将被回收。