我已经确保 "PDO::ATTR_STRINGIFY_FETCHES" 的值为false,以确保结果不会被强制转化为字符串。
我看到的答案有:
1. 无法解决。 - 不是真的,Mac OS X上安装的PHP/MySQL运行正常。 2. 在代码中将所有值进行类型转换。 - 我不会这样做。 3. 不用担心,PHP是弱类型语言。 - 我的数据会以JSON格式输出,并被许多其他服务使用,一些服务要求数据以正确的格式输出。
从我的研究中我了解到这是驱动程序实现问题。许多来源声称MySQL原生驱动程序不支持返回数字类型。但在Mac OS X上正常工作,除非他们想说“Linux上的MySQL本地驱动程序不支持此功能”。这意味着我在Mac OS X上安装的驱动程序/环境特殊。我一直试图识别差异以修复问题,但我的知识受限,不知道如何检查这些问题。
两个环境之间的区别包括: - OS X上的PHP是通过Home Brew编译和安装的。 - Ubuntu上的PHP是通过“apt-get install php5-dev”安装的。 - OS X上的PHP连接到运行在OS X上的MySQL服务器。 - Ubuntu上的PHP连接到Rackspace云数据库。
Ubuntu环境: - 版本:10.04.1 - PHP 5.4.21-1+debphp.org~lucid+1 (cli) (built: Oct 21 2013 08:14:37) - pdo_mysql已启用
Mac OS X环境: - 10.7.5 - PHP 5.4.16 (cli) (built: Aug 22 2013 09:05:58) - pdo_mysql已启用,其客户端API版本为mysqlnd 5.0.10。
使用的PDO标志:无。
PDO::ATTR_CASE => PDO::CASE_NATURAL,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::ATTR_EMULATE_PREPARES => false,