Laravel mysql 마이그레이션 오류
최근에 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'")
버전:
Mysql 8.0.11
라라벨 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에서 데이터베이스를 만들었습니다.
나는 마침내 얼마 전에 이 댓글을 기억한 해결책을 발견했다.에서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',
],
],
파일:
설정/삭제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';
실제로 이 코드를 mysql 드라이버와의 각 연결 끝에 추가해야 합니다.
'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에서 작동하던 Larabel을 5.3에서 5.7로 업그레이드한 후 문제가 없었고, 구글에서 검색한 결과 해결책을 찾을 수 없었습니다.나에게 효과가 있었던 것은 내 프로젝트 폴더를 검색하는 것이었다.
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
이 목록에서 모든 것 다시 일했다.
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를 사용합니다.이 절차를 따르면 GRANT 문에 NO_AUTO_CREATE_USER SQL 모드가 중요하지 않으므로 이 모드도 마찬가지입니다.
이 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에서는 "sql_mode" 파라미터에서 "NO_AUTO_CREATE_USER" 옵션이 삭제되어 Laravel이 이를 찾고 있습니다.
내가 만난 같은 문제 오늘나는 오늘 같은문제에 직면했다와 함께 나왔다.mysql 8
,,php 8
,,laravel 8
솔루션
나는 방금 내방금 업데이트했습니다 업데이트된다.config/database
파일을 파일 및 변경됨strict
부터에서true
로.false
절에서
'mysql' => [
...
'prefix_indexes' => true,
'strict' => false,
'engine' => null,
...
],
나한테는 효과가 있었어요
5.5 Larabel 5.5 "mysql 8.0.11"은 됩니다.NO_AUTO_CREATE_USER
모드로부터 해방됩니다.저 에는 '', '다', '다', '다', '다', '다', '다'로 요.5.6.47.0
. 에서는 . larabel 7의 이 추가되었습니다.config/database.php
'mysql' => [
// ...
'strict' => true,
'version' => '8.0.11',
]
에서는 가장 쉬운 해결책은 7.x로 입니다.'strict' => false
조명/데이터베이스/커넥터/MySqlConnector.php
protected function strictMode(PDO $connection, $config)
{
$version = $config['version'] ?? $connection->getAttribute(PDO::ATTR_SERVER_VERSION);
if (version_compare($version, '8.0.11') >= 0) {
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_ENGINE_SUBSTITUTION'";
}
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'";
}
문제는 Configuration의 데이터베이스 이름의 철자가 틀렸다는 것입니다.
언급URL : https://stackoverflow.com/questions/49949526/laravel-mysql-migrate-error
'programing' 카테고리의 다른 글
Maria DB가 권장하는 RAM, 디스크, 코어 용량 (0) | 2022.09.30 |
---|---|
Python에서 문자열에서 숫자를 추출하는 방법은 무엇입니까? (0) | 2022.09.30 |
Java를 사용하여 파일이 있는 폴더를 삭제하는 방법 (0) | 2022.09.30 |
내비게이션 드로어 항목 아이콘이 원래 색상을 나타내지 않음 (0) | 2022.09.30 |
SIGTERM 신호를 정상적으로 처리하는 방법 (0) | 2022.09.23 |