Ошибка миграции Laravel mysql

Я недавно отформатировал свою книгу для Mac 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

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

Это помогает? stackoverflow.com/questions/12594594/…

David Brossard 20.04.2018 22:53

Похоже, вам нужно сделать что-то вроде (как пользователь root): GRANT ALL ON fisica.* TO 'username_here'@'127.0.0.1' IDENTIFIED BY 'password_here'; FLUSH PRIVILEGES;

num8er 20.04.2018 22:57

Можете ли вы добавить к вопросу верхнюю часть файла дампа?

Tarek Adam 20.04.2018 23:06

@DavidBrossard У меня mysql 8.0.11, так что я так не думаю.

Julian Mendez 20.04.2018 23:51

@ num8er я попробую!

Julian Mendez 20.04.2018 23:51
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
60
5
32 198
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

При чтении документации mysql 8.0 похоже, что NO_AUTO_CREATE_USER был удален из sql-режима. Я подозреваю, что ваш my.cnf ссылается на это и должен быть удален из вашего conf и любых внутренних настроек mysql, а ваш mysqld перезапущен.

Имейте в виду, я не обновлялся до mysql 8.0 и просто читал документацию. Я доволен использованием 5.6.

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

Using GRANT to create users. Instead, use CREATE USER. Following this practice makes the NO_AUTO_CREATE_USER SQL mode immaterial for GRANT statements, so it too is removed.

Комбинация этого ответа @eValdezate помогла мне

Burgi 09.08.2019 16:58
Ответ принят как подходящий

Я наконец нашел решение несколько дней назад, и я вспомнил этот пост. В файле config/database.php в теге mysql необходимо добавить режимы 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',
        ],
    ],

Что касается меня, мне нужно было только добавить значения ключа и массива modes в мою конфигурацию.

Tom Magnusson 01.07.2018 20:08

У меня MySQL 8, и добавление этого тега "режимы" все работало правильно. Спасибо!

onavascuez 29.08.2018 09:10

Мне интересно, есть ли какая-либо другая команда, которую нужно запустить после добавления режимов в массив соединений, прежде чем это сработает, я добавил режимы и попытался запустить php artisan migrate, но я столкнулся с той же ошибкой

Picrasma 08.09.2019 01:40

после этого используйте команду: php artisan config:cache

mohammad asghari 15.10.2020 12:39

Фактически вы должны добавить этот код в конец каждое из соединений, которые у вас есть с драйвером 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

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

Также отключите sql_mode

через SQL:

SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';

через my.cnf внутри заголовка [mysqld]

sql_mode=NO_ENGINE_SUBSTITUTION

Протестируйте изменения:

SHOW VARIABLES LIKE 'sql_mode';

strict => false исправил это для меня. и его гораздо легче запомнить, чем задавать массив "режимов". Спасибо.

Altin 02.03.2021 16:32

Хорошо, это работа для меня, просто поменяйте на ложь. Tks

Romulo Sousa 17.04.2021 00:59

Я испытал вышеуказанную ситуацию после обновления laravel с 5.3 до 5.7, когда он ранее работал с MySQL 8 без каких-либо проблем, принятый ответ не сработал для меня, и после поиска в Google я не нашел решения. то, что сработало для меня, искало мою папку проекта

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 из списка, все снова заработало.

Этот режим SQL не поддерживается в вашей версии MYSQL. Он был удален в версии 8.0. Последней версией, поддерживающей этот режим sql, была версия 5.8. Ваша версия MYSQL может быть 8 или более поздней. (Laravel тоже должен обновиться)

Закомментируйте или удалите эту строку из вашего файла config/database.php

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

MySQL 8 не поддерживается. У меня была такая же проблема, и мне пришлось использовать более раннюю версию MySQL (5.7).

В MySQL 8 параметр «NO_AUTO_CREATE_USER» был удален из параметра «sql_mode», и Laravel его ищет.

Другие вопросы по теме