私は最近、macbook 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からデータベースを作成しました
私はついに数日前に解決策を見つけ、この投稿を思い出しました。 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',
],
],
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ステートメントに対して重要ではなくなるため、これも削除されます。
事実上、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';
見出し[mysqld]
内のmy.cnfを介して
sql_mode=NO_ENGINE_SUBSTITUTION
変更をテストします。
SHOW VARIABLES LIKE 'sql_mode';