laravel mysql迁移错误

yebdmbv4  于 2021-06-21  发布在  Mysql
关注(0)|答案(7)|浏览(436)

我最近格式化了我的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版本
拉威尔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创建了数据库

hi3rlvi2

hi3rlvi21#

在阅读mysql 8.0文档时,看起来no\u auto\u create\u用户已从sql模式中删除。我怀疑您的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\u auto\u create\u user sql模式对于grant语句来说无关紧要,因此也被删除。

kokeuurv

kokeuurv2#

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

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

vxqlmq5t3#

您的mysql版本不支持该sql模式。它在8.0版中被删除。支持此sql模式的最新版本是5.8。您的mysql版本可能是8或更高版本(laravel也应该更新)
注解掉或删除你的 config/database.php 文件

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

uqzxnwby4#

几天前我终于找到了解决办法,我记得这篇文章。在 config/database.php 在mysql标记中,应该添加sql模式以跳过此错误。https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#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',
        ],
    ],
apeeds0o

apeeds0o5#

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

31moq8wy

31moq8wy6#

在文件中:
配置/database.php

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

同时禁用sql\U模式
通过sql:

SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';

通过my.cnf内部标题 [mysqld] ```
sql_mode=NO_ENGINE_SUBSTITUTION

测试更改:

SHOW VARIABLES LIKE 'sql_mode';

brjng4g3

brjng4g37#

我经历了上面的情况后,升级拉威尔从5.3到5.7它以前与MySQL8没有任何问题的工作接受的答案不适合我和谷歌搜索后,我没有找到一个解决方案。对我有用的是搜索我的项目文件夹

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 从清单上看,一切又恢复了正常。

相关问题