它不是什么
虽然 MySQL Native Driver 被编写为 PHP 扩展,但需要注意的是,它并没有为 PHP 程序员提供新的 API。MySQL 数据库连接的程序员 API 由 MySQL 扩展、mysqli
和 PDO MYSQL 提供。这些扩展现在可以使用 MySQL Native Driver 的服务与 MySQL 服务器通信。因此,你不应该将 MySQL Native Driver 视为 API。
为什么要使用它?
与使用 MySQL Client Library 相比,使用 MySQL Native Driver 提供了许多优势。
较旧的 MySQL Client Library 由 MySQL AB(现为 Oracle Corporation)编写,因此在 MySQL 许可证下发布。这最终导致 PHP 中默认禁用 MySQL 支持。但是,MySQL Native Driver 已作为 PHP 项目的一部分开发,因此在 PHP 许可证下发布。这消除了过去一直存在的问题的许可证问题。
此外,在过去,您需要针对 MySQL Client Library 的副本构建 MySQL 数据库扩展。这通常意味着您需要在构建 PHP 源代码的机器上安装 MySQL。此外,当您的 PHP 应用程序运行时,MySQL 数据库扩展将在运行时调用 MySQL Client 库文件,因此该文件需要安装在您的系统上。使用 MySQL Native Driver,这种情况不再存在,因为它包含在标准分发版中。因此,您不需要安装 MySQL 即可构建 PHP 或运行 PHP 数据库应用程序。
由于 MySQL Native Driver 是作为 PHP 扩展编写的,因此它与 PHP 的工作原理紧密耦合。这导致效率提高,尤其是在内存使用方面,因为驱动程序使用 PHP 内存管理系统。它还支持 PHP 内存限制。使用 MySQL Native Driver 的性能与使用 MySQL Client Library 相当或更好,它始终确保最有效地利用内存。内存效率的一个例子是,当使用 MySQL Client Library 时,每行在内存中存储两次,而使用 MySQL Native Driver 时,每行仅在内存中存储一次。
注意:报告内存使用情况
由于 MySQL Native Driver 使用 PHP 内存管理系统,因此可以使用 memory_get_usage() 跟踪其内存使用情况。使用 libmysqlclient 则无法实现这一点,因为它使用 C 函数 malloc()。
特殊功能
MySQL Native Driver 还提供了一些在 MySQL 数据库扩展使用 MySQL Client Library 时无法获得的特殊功能。这些特殊功能列在下面
改进的持久连接
特殊函数 mysqli_fetch_all()
性能统计调用:mysqli_get_client_stats()、mysqli_get_connection_stats()
性能统计功能可以证明在识别性能瓶颈方面非常有用。
与 mysqli
扩展一起使用时,MySQL Native Driver 也允许持久连接。
SSL 支持
MySQL Native Driver 支持 SSL。
压缩协议支持
MySQL Native Driver 支持压缩的客户端服务器协议。如果配置为使用 MySQL Native Driver,扩展 ext/mysqli
也可以利用此功能。请注意,PDO_MYSQL
在与 mysqlnd 一起使用时不支持压缩。
命名管道支持
命名管道可用于在 Windows 环境中连接。