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

Laravel 5.5 适配MySQL 8.0.11:无法设置sql_mode为NO_AUTO_CREATE_USER求解

解决Laravel 5.5与MySQL 8.0.11的NO_AUTO_CREATE_USER报错问题

这个报错的核心原因很明确:MySQL 8.0.11 已经彻底移除了NO_AUTO_CREATE_USER这个SQL模式选项,所以不管你是手动执行set global sql_mode命令,还是Laravel尝试设置这个模式,都会触发ERROR 1231。下面是具体的解决步骤:

1. 清理MySQL的全局SQL模式

首先确认当前MySQL的SQL模式设置,执行以下SQL命令:

SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;

如果输出结果里包含NO_AUTO_CREATE_USER,需要永久移除它:

  • 找到MySQL的配置文件(Linux系统通常是/etc/my.cnf或/etc/mysql/my.cnf,Windows系统是my.ini,位置可能在MySQL安装目录或C:\ProgramData\MySQL下)
  • 找到sql_mode配置行,删除其中的NO_AUTO_CREATE_USER字段。比如原来的配置可能是:
    sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    
    修改后变成:
    sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    
  • 保存配置文件后,重启MySQL服务让修改生效(Linux用systemctl restart mysql,Windows在服务管理器里重启MySQL服务)

2. 检查并修正Laravel的数据库配置

Laravel 5.5可能会在数据库配置中指定SQL模式,需要确认并移除NO_AUTO_CREATE_USER:

  • 打开项目根目录下的config/database.php
  • 找到mysql配置数组中的modes项(如果存在),删除其中的'NO_AUTO_CREATE_USER'元素。示例修改后:
    'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
        'modes' => [
            'ONLY_FULL_GROUP_BY',
            'STRICT_TRANS_TABLES',
            'NO_ZERO_IN_DATE',
            'NO_ZERO_DATE',
            'ERROR_FOR_DIVISION_BY_ZERO',
            'NO_ENGINE_SUBSTITUTION',
        ],
    ],
    
  • 如果没有modes项,通常不需要额外设置,因为Laravel会使用MySQL的全局模式

3. 额外注意:MySQL 8.0的用户权限设置

MySQL 8.0不再支持通过GRANT语句自动创建用户,所以如果你是新创建数据库用户,需要先执行CREATE USER命令,再给用户授权。比如:

CREATE USER 'your_user'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON your_database.* TO 'your_user'@'localhost';
FLUSH PRIVILEGES;

确保Laravel配置文件中使用的数据库用户已经正确创建并拥有足够权限。

完成以上步骤后,重新尝试登录应用,应该就能解决这个报错了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:11:26