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
字节。对于客户端,与连接关联的缓冲区的大小在连接关闭之前不会减小,此时将回收客户端内存。