Laravel 5.7 Ремесленник мигрирует - PullRequest
0 голосов
/ 19 ноября 2018

Я недавно установил laravel 5.7.Как исправить ошибку "php artisan migrate"?

Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table

   Illuminate\Database\QueryException  : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))

  at C:\laravel\blg2\vendor\laravel\framework\src\Illuminate\Database\Connection.php:664
    660|         // If an exception occurs when attempting to run a query, we'll format the error    661|         // message to include the bindings with SQL, which will make this exception a    662|         // lot more helpful to the developer instead of just the database's errors.    663|         catch (Exception $e) {
  > 664|             throw new QueryException(
    665|                 $query, $this->prepareBindings($bindings), $e
    666|             );
    667|         }
    668|

  Exception trace:

  1   PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes")      C:\laravel\blg2\vendor\laravel\framework\src\Illuminate\Database\Connection.php:458

  2   PDOStatement::execute()
      C:\laravel\blg2\vendor\laravel\framework\src\Illuminate\Database\Connection.php:458

  Please use the argument -v to see more details.

Спасибо

Ответы [ 5 ]

0 голосов
/ 03 марта 2019

On xampp php 7.3.2 , laravel 5.7 , а также в laravel 5.8.3 это случилось со мной. Изменен только файл config / database.php.

config/database.php

Изменены кодировка и сопоставление на MySQL, и все заработало нормально. Изменить эту часть

'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',

а

'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',

Теперь он будет принимать длинные ключи.

0 голосов
/ 03 января 2019

Откройте ваш AppServiceProvider.php, Путь >> App \ Providers \ AppServiceProvider.php

    namespace App\Providers;

use Illuminate\Support\ServiceProvider;
**use Illuminate\Support\Facades\Schema;**

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        **Schema::defaultStringLength(191);**
    }
0 голосов
/ 29 ноября 2018

Вам нужно перейти на App\Providers\AppServiceProvider.php

Теперь добавьте следующий код, а затем сохраните и запустите php artisan serve

use Illuminate\Support\Facades\Schema;

...

public function boot()
{
Schema::defaultStringLength(191);
}

Я использую Laravel 5.7, но эта ошибка всегда появляется. Добавьте этот код в каждый проект. Также попробуйте использовать Laravel с php7 +, чтобы он не показывал вам PDO::Exception Error...

0 голосов
/ 02 января 2019

Если вы используете версию MySQL, более раннюю, чем версия 5.7.7, или MariaDB старше, чем версия 10.2.2, вам может потребоваться вручную настроить длину строки по умолчанию, создаваемую миграциями, чтобы MySQL создавал для них индексы. .

Вы можете исправить это, как сказал Чин Люн.

Или добавление длины записи непосредственно в миграцию.

$ table-> string ('email', 100); Эквивалентный столбец VARCHAR с дополнительной длиной.

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name', 50);
        $table->string('email', 90)->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
}
0 голосов
/ 19 ноября 2018

Laravel по умолчанию использует набор символов utf8mb4, который включает в себя поддержку хранения "emojis" в базе данных. Если вы используете версию MySQL, более раннюю, чем версия 5.7.7, или MariaDB, более раннюю, чем версия 10.2.2, вам может потребоваться вручную настроить длину строки по умолчанию, создаваемую миграциями, чтобы MySQL мог создать для них индексы.

Внутри вашего AppServiceProvider :

use Illuminate\Support\Facades\Schema;

...

public function boot()
{
    Schema::defaultStringLength(191);
}

Кроме того, вы можете включить опцию innodb_large_prefix для вашей базы данных. Обратитесь к документации вашей базы данных для получения инструкций о том, как правильно включить эту опцию.

Для получения дополнительной информации об индексах: https://laravel.com/docs/5.7/migrations#indexes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...