You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 11中如何关闭MySQL的ONLY_FULL_GROUP_BY模式(不关闭严格模式)

在Laravel 11中保留严格模式但移除ONLY_FULL_GROUP_BY的配置方法

当config/database.php中strict = true时,MySQL会启用包含ONLY_FULL_GROUP_BY的严格SQL模式,这会限制简单GROUP BY查询的执行。如果不想关闭整体严格模式,仅移除ONLY_FULL_GROUP_BY选项,可以通过修改数据库配置中的PDO初始化命令实现:

配置修改方案

打开config/database.php,找到mysql配置数组,在options中添加PDO::MYSQL_ATTR_INIT_COMMAND配置项,具体代码如下:

'mysql' => [
    'driver' => 'mysql',
    'url' => env('DB_URL'),
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'laravel'),
    'username' => env('DB_USERNAME', 'root'),
    'password' => env('DB_PASSWORD', ''),
    'sslmode' => env('DB_SSLMODE', 'required'),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => env('DB_CHARSET', 'utf8mb4'),
    'collation' => env('DB_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'),
         // 初始化会话时移除ONLY_FULL_GROUP_BY
         PDO::MYSQL_ATTR_INIT_COMMAND => "SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''))",
    ]) : [],
],

配置说明

  • 保留'strict' => true:维持Laravel严格模式的其他约束,仅针对ONLY_FULL_GROUP_BY做单独移除
  • PDO::MYSQL_ATTR_INIT_COMMAND:每次数据库连接建立时,执行该SQL语句动态修改当前会话的sql_mode,将其中的ONLY_FULL_GROUP_BY剔除,不影响全局数据库配置
  • array_filter:过滤空值配置项,确保数组仅包含有效参数

内容的提问来源于stack exchange,提问作者Čamo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 05:13:14