Php Laravel mysql迁移错误
我最近格式化了我的mac book pro,在从github克隆项目并安装了MySql和Sequel pro等我需要的东西后,我尝试迁移数据库信息,但出现以下错误:Php Laravel mysql迁移错误,php,mysql,laravel,laravel-5.6,Php,Mysql,Laravel,Laravel 5.6,我最近格式化了我的mac book 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'
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)
在阅读mysql 8.0文档时,我从Sequel PRO GUI创建了数据库,看起来没有自动创建用户从sql模式中删除了。我怀疑您的my.cnf引用了这个,应该从您的conf和任何mysql内部设置中删除,并重新启动您的mysqld 请记住,我没有升级到mysql 8.0,只是在阅读文档。我很高兴使用5.6 使用GRANT创建用户。而是使用createuser。按照这种做法,NO_AUTO_CREATE_USER SQL模式对于GRANT语句来说无关紧要,因此它也被删除了
几天前我终于找到了解决办法,我记得这篇文章。 在mysql标记中的
config/database.php
文件中,应添加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',
],
],
实际上,您必须在与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 同时禁用sql_模式
通过SQL: 通过标题内的my.cnf
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION
测试更改:
SHOW VARIABLES LIKE 'sql_mode';
在将laravel从5.3升级到5.7之后,我经历了上述情况,之前使用MySQL 8时没有任何问题。接受的答案对我不起作用,在谷歌搜索之后,我没有找到解决方案。对我有用的是搜索我的项目文件夹
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\u AUTO\u CREATE\u USER
,一切又恢复正常。您的MYSQL版本不支持SQL模式。它在8.0版中被删除。支持此sql模式的上一个版本是5.8。您的MYSQL版本可能是8或更高版本。(Laravel也应该更新)
从config/database.php
文件中注释掉或删除该行
mysql' => [
...
'modes' => [
...
//'NO_AUTO_CREATE_USER',
],
不支持MySQL 8。
我也遇到了同样的问题,不得不使用更低的MySQL版本(5.7)
在MySQL 8中,从“sql模式”参数中删除了“NO_AUTO_CREATE_USER”选项,Laravel正在寻找该选项。这有帮助吗?似乎您需要(作为root用户):
GRANT ALL ON fisica.*授予由“password_here”标识的“username_here”@“127.0.0.1”;同花顺特权
你能将转储文件的顶部添加到你的问题中吗?@DavidBrossard我有mysql 8.0.11,所以我不这么认为。@num8er我会试试!对我来说,我只需要将modes
键和数组值添加到我的配置中。我有MySQL 8,添加这个标签“modes”都可以正常工作。谢谢我想知道在将模式添加到连接阵列之后,是否还有其他命令需要运行才能正常工作,我添加了模式并尝试运行php artisan migrate,但在使用命令之后,我遇到了相同的错误:php artisan config:cache
an@eValdezate的答案组合帮助mestrict=>false为我修复了它。而且比设置“模式”数组更容易记住。谢谢。很好,这是我的工作,只是换成假的。Tksi知道这很古老,但我今天遇到了这一点,在尝试了上面列出的所有解决方案后,这是唯一对我有效的方法。编辑供应商文件不是最好的主意,但这是本地的(因为live运行的是mysql5.6,所以对我来说都很好:)
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'";
mysql' => [
...
'modes' => [
...
//'NO_AUTO_CREATE_USER',
],