为何Laravel默认PDO::ATTR_EMULATE_PREPARES=false
关于PDO::ATTR_EMULATE_PREPARES
一样的sql,值为true
的查询速度要快于false
时,然而Laravel
的默认值却是false
我只查到在PHP 5.3.9
之前本地模拟有BUG
,可是即使Laravel 9.x
的默认值仍然是默认false
的,而9.x
要求是PHP ^8.0
,即不可能遇上当初的BUG了
我的问题:
Laravel
设置默认值为false
的动机是什么?- 如果我在配置文件里将其指定为
true
会有什么负面作用吗? - 大家是如何配置的?
经过多次测试发现
- 当PHP服务器性能远远好于MySQL服务器时,设为true能显著提高性能,反之亦然
- 当两者性能相当时设何值对性能的影响微乎其微
总结:当数据库服务器性能不够而php服务器性能冗余时推荐设置为true,否则设置为false的综合情况更好
默认是false就是为了保持查出的数据类型不变。设置为true,那就是项目有需求就可以,这个设置主要看项目吧。影响就是设置true后查出的数据类型都是字符了