Jul*_*dez 30 php mysql laravel laravel-5.6
我最近格式化我的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'")
Run Code Online (Sandbox Code Playgroud)
版本:
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
Run Code Online (Sandbox Code Playgroud)
我从Sequel PRO GUI创建了数据库
Jul*_*dez 78
我终于在几天前找到了解决方案,我记得这篇文章.在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',
],
],
Run Code Online (Sandbox Code Playgroud)
Efr*_*rén 22
在文件中:
配置/数据库.php
'mysql' =[
...
'strict' => false
]
Run Code Online (Sandbox Code Playgroud)
还可以
通过 SQL禁用 sql_mode :
SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';
Run Code Online (Sandbox Code Playgroud)
通过 my.cnf 里面的标题 [mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION
Run Code Online (Sandbox Code Playgroud)
测试更改:
SHOW VARIABLES LIKE 'sql_mode';
Run Code Online (Sandbox Code Playgroud)
小智 11
实际上,您必须在与 mysql 驱动程序的每个连接的末尾添加此代码
'modes' => [
'ONLY_FULL_GROUP_BY',
'STRICT_TRANS_TABLES',
'NO_ZERO_IN_DATE',
'NO_ZERO_DATE',
'ERROR_FOR_DIVISION_BY_ZERO',
'NO_ENGINE_SUBSTITUTION',
],
Run Code Online (Sandbox Code Playgroud)
小智 8
您的 MYSQL 版本不支持该 SQL 模式。它在 8.0 版本中被删除。支持此 sql 模式的最后一个版本是 5.8。您的 MYSQL 版本可能是 8 或更高版本。(Laravel 也应该更新)
注释掉或从config/database.php
文件中删除该行
mysql' => [
...
'modes' => [
...
//'NO_AUTO_CREATE_USER',
],
Run Code Online (Sandbox Code Playgroud)
小智 5
在将 laravel 从 5.3 升级到 5.7 之后,我遇到了上述情况,它之前使用 MySQL 8 没有任何问题,接受的答案对我不起作用,在谷歌搜索后我没有找到解决方案。对我有用的是搜索我的项目文件夹
grep -rnw 'Location_to_your_project_folder' -e 'sql_mode'
Run Code Online (Sandbox Code Playgroud)
这导致我
~/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'";
Run Code Online (Sandbox Code Playgroud)
一旦我NO_AUTO_CREATE_USER
从列表中删除了它,一切又恢复了。