Php Laravel mysql迁移错误

Php Laravel mysql迁移错误,php,mysql,laravel,laravel-5.6,Php,Mysql,Laravel,Laravel 5.6,我最近格式化了我的mac book pro,在从github克隆项目并安装了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'

我最近格式化了我的mac book pro,在从github克隆项目并安装了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

拉威尔5.6.12

PHP 7.1.14(cli)


在阅读mysql 8.0文档时,我从Sequel PRO GUI创建了数据库,看起来没有自动创建用户从sql模式中删除了。我怀疑您的my.cnf引用了这个,应该从您的conf和任何mysql内部设置中删除,并重新启动您的mysqld

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

使用GRANT创建用户。而是使用createuser。按照这种做法,NO_AUTO_CREATE_USER SQL模式对于GRANT语句来说无关紧要,因此它也被删除了


几天前我终于找到了解决办法,我记得这篇文章。 在mysql标记中的
config/database.php
文件中,应添加sql模式以跳过此错误

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

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

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

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

文件:

config/database.php

同时禁用sql_模式

通过SQL:

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

sql_mode=NO_ENGINE_SUBSTITUTION
测试更改:

SHOW VARIABLES LIKE 'sql_mode';

在将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\u AUTO\u CREATE\u USER
,一切又恢复正常。

您的MYSQL版本不支持SQL模式。它在8.0版中被删除。支持此sql模式的上一个版本是5.8。您的MYSQL版本可能是8或更高版本。(Laravel也应该更新)

config/database.php
文件中注释掉或删除该行

mysql' => [
  ...
  'modes' => [
    ...
    //'NO_AUTO_CREATE_USER',
],
不支持MySQL 8。 我也遇到了同样的问题,不得不使用更低的MySQL版本(5.7)


在MySQL 8中,从“sql模式”参数中删除了“NO_AUTO_CREATE_USER”选项,Laravel正在寻找该选项。

这有帮助吗?似乎您需要(作为root用户):
GRANT ALL ON fisica.*授予由“password_here”标识的“username_here”@“127.0.0.1”;同花顺特权
你能将转储文件的顶部添加到你的问题中吗?@DavidBrossard我有mysql 8.0.11,所以我不这么认为。@num8er我会试试!对我来说,我只需要将
modes
键和数组值添加到我的配置中。我有MySQL 8,添加这个标签“modes”都可以正常工作。谢谢我想知道在将模式添加到连接阵列之后,是否还有其他命令需要运行才能正常工作,我添加了模式并尝试运行php artisan migrate,但在使用命令之后,我遇到了相同的错误:
php artisan config:cache
an@eValdezate的答案组合帮助mestrict=>false为我修复了它。而且比设置“模式”数组更容易记住。谢谢。很好,这是我的工作,只是换成假的。Tksi知道这很古老,但我今天遇到了这一点,在尝试了上面列出的所有解决方案后,这是唯一对我有效的方法。编辑供应商文件不是最好的主意,但这是本地的(因为live运行的是mysql5.6,所以对我来说都很好:)
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'";
mysql' => [
  ...
  'modes' => [
    ...
    //'NO_AUTO_CREATE_USER',
],