Laravel mysql迁移错误

时间:2018-04-20 20:49:24

标签: php mysql laravel laravel-5.6

我最近格式化我的mac book pro,从github克隆了proyect并安装了我需要的东西,比如MySql和Sequel Pro我试图迁移数据库信息,但是我收到了这个错误:

   Illuminate\Database\QueryException  : SQLSTATE[42000]: Syntax error or access violation: 1231 Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER' (SQL: select * from information_schema.tables where table_schema = fisica and table_name = migrations)

  Exception trace:

  1   PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1231 Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'")

版本:

Mysql 8.0.11

Laravel 5.6.12

PHP 7.1.14(cli)

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=fisica
DB_USERNAME=xxx
DB_PASSWORD=xxx

我从Sequel PRO GUI

创建了数据库

8 个答案:

答案 0 :(得分:57)

我终于在几天前找到了解决方案,我记得这篇文章。 在mysql标记的config/database.php文件中,应添加sql模式以跳过此错误。 https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sql-mode-full

我的MySQL阵列最终是这样的:

    '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',
        ],
    ],

答案 1 :(得分:2)

不支持 MySQL 8。 我遇到了同样的问题,不得不使用较低的 MySQL 版本 (5.7)。

在 MySQL 8 中,从“sql_mode”参数中删除了选项“NO_AUTO_CREATE_USER”,Laravel 正在寻找它。

答案 2 :(得分:1)

在阅读mysql 8.0文档时,看起来NO_AUTO_CREATE_USER已从sql-mode中删除。我怀疑你的my.cnf有这个引用,应该从你的conf和内部的任何mysql设置中删除,你的mysqld重新启动。

请记住,我还没有升级到mysql 8.0,只是阅读文档。我很高兴使用5.6。

https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html

  

使用GRANT创建用户。而是使用CREATE USER。遵循这种做法使得NO_AUTO_CREATE_USER SQL模式对GRANT语句无关紧要,因此它也被删除了。

答案 3 :(得分:1)

实际上,您必须在与mysql驱动程序的每个连接结束时添加此代码

'modes' => [
             'ONLY_FULL_GROUP_BY',
             'STRICT_TRANS_TABLES',
             'NO_ZERO_IN_DATE',
             'NO_ZERO_DATE',
             'ERROR_FOR_DIVISION_BY_ZERO',
             'NO_ENGINE_SUBSTITUTION',
         ],

答案 4 :(得分:1)

在将laravel从5.3升级到5.7之后,在以前与MySQL 8兼容的情况下,我没有遇到任何问题,可接受的答案对我不起作用,并且在谷歌搜索之后没有找到解决方案,因此我遇到了上述情况。对我有用的是搜索我的项目文件夹

grep -rnw 'Location_to_your_project_folder' -e 'sql_mode'

我带我去

~/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php:183:return "set session 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'";

一旦我从列表中删除了NO_AUTO_CREATE_USER,一切都会恢复正常。

答案 5 :(得分:1)

您的MYSQL版本不支持该SQL模式。在8.0版中已将其删除。支持此sql模式的最新版本是5.8。您的MYSQL版本可能是8或更高版本。 (Laravel也应更新)

从您的config/database.php文件中注释或删除该行

mysql' => [
  ...
  'modes' => [
    ...
    //'NO_AUTO_CREATE_USER',
],

答案 6 :(得分:0)

在文件中:

  

config / database.php

'mysql' =[
    ...
    'strict' => false
]

还禁用sql_mode

通过SQL:

SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';

通过标题[mysqld]内的my.cnf

sql_mode=NO_ENGINE_SUBSTITUTION

测试更改:

SHOW VARIABLES LIKE 'sql_mode';

答案 7 :(得分:-2)

我的问题是配置中的数据库名称拼写错误。