mysqlnd驱动

php5.3以前,默认使用的都是libmysqlclient(MySQL client server library),5.3之后,mysqlnd(mysql native driver)已经内置于php源代码中,并且官方强烈建议使用这个驱动。虽然它是作为php扩展被编写,但是需要注意的是,它不提供新API给php程序员。连接mysql的API是由mysql扩展,由mysqli和PDO MYSQL提供。这些扩展现在可以用mysqlnd与mysql server通信。因此,你不应该认为mysqlnd是一个API。

mysqlnd比MySQL Client Library多几个优点

旧的MySQL Client Library是由MySQL AB(现在是oracle组织)写的,所以是在mysql许可证下发行的。这最终导致mysql支持在php中默认被禁用。但是,mysqlnd已经作为php项目的一部分被开发,是在php许可证下发行,这消除了过去存在的许可问题。

同时,在过去,你需要根据libmysqlclient的副本构建mysql数据库扩展。意味着,你在安装php的机器上需要安装mysql。并且,PHP应用运行时,mysql的扩展会调用libmysqlclient文件,所以该文件需要在你的系统上被安装。而用mysqlnd将不会有这种情况,因为它是作为标准分发的一部分了。所以你不需要安装一个mysql来构建php或者运行php数据库应用。

因为mysqlnd作为php扩展被编写,所以它能够和php工作紧密结合。这在效率上会有收益,特别是来自内存的使用,作为驱动在php内存管理系统中使用。它同样支持php内存限制。使用mysqlnd比libmysqlclient有更好的性能,它总是保证最有效的使用内存。一个例子是,当用MySQL Client Library,每一行都会在内存中存储两次,而用mysqlnd只存储一次。

注意:内存使用
因为mysqlnd用的是php的内存管理系统,它的内存使用会被 memory_get_usage()函数追踪到。而这对libmysqlclient来说是不可能的,因为它用的是c函数malloc().

特殊功能

mysqlnd提供一些MySQL Client Library没有的特殊功能:

  • 改进了持久连接
  • 特殊方法mysqli_fetch_all()
  • 性能统计调用: mysqli_get_cache_stats(), mysqli_get_client_stats(), mysqli_get_connection_stats()

性能统计工具在识别性能瓶颈上被证明非常有用。
当用mysqli扩展时,mysqlnd同样提供持久连接。

ssl支持

从php5.3.3开始,mysqlnd意境支持ssl

压缩协议支持

php5.3.2 mysqlnd支持压缩的客户端服务协议。在5.3.0和5.3.1中还不支持。扩展比如ext/mysql,ext/mysqli用mysqlnd,同样可以利用此功能。注意pdo_mysql不支持压缩当和mysqlnd一起用时。

命名管道支持

windows的命名管道支持在php5.4.0被增加