Ошибка миграции Laravel mysql
Я недавно отформатировал свою программу mac book pro после клонирования proyect от 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 GUI
Ответы
Ответ 1
Я наконец нашел решения несколько дней назад, и я вспомнил этот пост. В файле 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',
],
],
Ответ 2
При чтении документации 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
Использование GRANT для создания пользователей. Вместо этого используйте CREATE USER. После этой практики режим NO_AUTO_CREATE_USER SQL несуществен для операторов GRANT, поэтому он тоже удаляется.
Ответ 3
Эффективно вы должны добавить этот код в конце каждого из соединений, которые у вас есть с драйвером 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
В файле:
конфиг /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';
Ответ 5
Моя проблема заключалась в имени базы данных с ошибками в конфигурации.