第 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 多线程客户端程序”

注意

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

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

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

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