首页 > 解决方案 > MySQL 升级导致简单 WHERE 子句出现意外结果

问题描述

我正在升级我的 Laravel 应用程序以使用 MySQL 8.0.23 从 8.0.20 并且我看到一些WHERE子句产生意外结果的问题。

select * from `servers` where `platform_id` = 1 and `platform_server_id` = 407254666900930563

直接在 MySQL 服务器上运行 ^ 会产生我正在寻找的记录,但是通过 Laravel 雄辩的查询构建器使用它却找不到记录。这是雄辩的代码:

Server::where('platform_id', 1) // removing this condition pulls the correct record
    ->where('platform_server_id', "407254666900930563")
    ->first()

我已经在platform_id确实 = 1 的数据库中进行了验证(通过直接运行 SQL 进行验证)。

这是我在 Laravel 端的 MySQL 配置...


            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
            'modes'  => [
                /**
                 * Disabled because of a group by we need
                 */
                //'ONLY_FULL_GROUP_BY',

                'STRICT_TRANS_TABLES',
                'NO_ZERO_IN_DATE',
                'NO_ZERO_DATE',
                'ERROR_FOR_DIVISION_BY_ZERO',
                'NO_ENGINE_SUBSTITUTION',
            ]

我查看了 MySQL 更改日志,但没有看到可能导致这种情况的原因。任何人有任何想法我应该调查什么?

标签: phpmysqllaravel

解决方案


推荐阅读