Php mysql从5.5升级到5.7后的空查询
我正在开发一个运行在mysql 5.5上的laravel 4.2应用程序。此应用程序迁移到新服务器,现在运行mysql 5.7 升级后,一些查询现在返回空 我相信这与mysql 5.7引入的sql_模式有关 示例查询Php mysql从5.5升级到5.7后的空查询,php,mysql,laravel-4,mysql-5.7,sql-mode,Php,Mysql,Laravel 4,Mysql 5.7,Sql Mode,我正在开发一个运行在mysql 5.5上的laravel 4.2应用程序。此应用程序迁移到新服务器,现在运行mysql 5.7 升级后,一些查询现在返回空 我相信这与mysql 5.7引入的sql_模式有关 示例查询 SELECT * FROM `table1` WHERE `col1` = 'val1' and (SELECT count(*) FROM `table2` WHERE `table2`.`table1_id` = `table1`.`id` and `driver_
SELECT * FROM `table1` WHERE `col1` = 'val1' and
(SELECT count(*) FROM `table2`
WHERE `table2`.`table1_id` = `table1`.`id`
and `driver_id` = '39') >= 1 and `table1`.`id` = '86' LIMIT 1
这是拉维尔雄辩地提出的一个问题。它返回为空。在旧的mysql 5.5上,它按预期返回一行
如果修复了主查询中的id,则它可以工作
... WHERE `table2`.`table1_id` = 86 ...
正如我之前所说的,我认为这与sql_模式有关
有什么想法吗 在大多数支持它的数据库中,
count(*)
实际上并不检索所有记录并对它们进行计数,而是获取一些元数据字段,这些字段只跟踪行数
当然,可以合理地预期,无论如何实现,count(*)
的结果将与更复杂但等效的查询相同
SELECT * FROM `table1` WHERE `col1` = 'val1' and
(SELECT count(`table2`.`id`) FROM `table2`
WHERE `table2`.`table1_id` = `table1`.`id`
and `driver_id` = '39') >= 1 and `table1`.`id` = '86' LIMIT 1
或者为了得到布尔值,试试这个
SELECT * FROM `table1` WHERE `col1` = 'val1' and
(SELECT 1 FROM `table2`
WHERE `table2`.`table1_id` = `table1`.`id`
and `driver_id` = '39') >= 1 and `table1`.`id` = '86' LIMIT 1
查询没有问题,确实可以更改查询以避免问题,但这并不能解决真正的问题 解决方案是在优化器\u开关配置中禁用索引\u合并\u交叉点 这是在mysql 5.7上发现的一个bug
这对我很有用。where子句中表1前面缺少“`”。对不起,我粘贴问题时出现了拼写错误。这就是拉威尔雄辩地复制的sql。为了隐私,我刚刚更改了表和列的名称。如果我将“count(*)更改为“count(
table
id
)”它会工作。敲响了警钟?我明白,但那是拉威尔·雄辩的ORM复制的代码。我相信解决方案是基于sql_模式配置的。我现在有默认值了。你怎么认为?