web-dev-qa-db-fra.com

Laravel mysql migrate error

J'ai récemment formaté mon Mac Book Pro, après avoir cloné le projet de github et installé les éléments dont j'ai besoin, comme MySql et Sequel Pro. J'ai essayé de migrer les informations de la base de données, mais le message d'erreur suivant s'affiche:

   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'")

Versions: 

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

J'ai créé la base de données à partir de Sequel PRO GUI

18
Julian Mendez

J'ai finalement trouvé les solutions il y a quelques jours et je me suis souvenu de cet article . Dans le fichier config/database.php de la balise mysql, les modes SQL doivent être ajoutés pour éviter cette erreur. https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sql-mode-full

Mon tableau MySQL a fini comme ça:

    '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',
        ],
    ],
45
Julian Mendez

En lisant la documentation de mysql 8.0, il semble que le NO_AUTO_CREATE_USER ait été retiré du mode SQL. Je soupçonne que votre my.cnf a cette référence et devrait être supprimé de votre conf et de tout paramètre mysql en interne et votre mysqld redémarré. 

N'oubliez pas que je n'ai pas mis à jour MySQL 8.0 et que je lis la documentation. Je suis heureux d'utiliser 5.6.

https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html

Utiliser GRANT pour créer des utilisateurs. À la place, utilisez CREATE USER. En suivant cette pratique, le mode SQL de NO_AUTO_CREATE_USER devient immatériel pour les instructions GRANT. Il est donc également supprimé.

1
Dom

Effectivement, vous devez ajouter ce code à la fin de chacune des connexions que vous avez avec le pilote mysql

'modes' => [
             'ONLY_FULL_GROUP_BY',
             'STRICT_TRANS_TABLES',
             'NO_ZERO_IN_DATE',
             'NO_ZERO_DATE',
             'ERROR_FOR_DIVISION_BY_ZERO',
             'NO_ENGINE_SUBSTITUTION',
         ],
1
eValdezate