Oorzaak en oplossing syntax error or access violation: 1071 Specified key was too long bij installeren Laravel database tabellen

Krijg je na het runnen van “php artisan migrate” de volgende melding

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`))

Dit komt door dat de standaard waarde op 255 staat (\vendor\laravel\framework\src\Illuminate\Database\Schema\Builder.php)

public static $defaultStringLength = 255;

Oorzaak van het probleem

Ik gebruik een Mysql database met utf8mb4 en die kan max 767 bytes aan.
Het veld voor een string/varchar lengte in Laravel is 255 karakrers.
1 karakter is 4 bytes. Dus 255 * 4 = 1020 overschrijf je deze waarden.

We moeten dit dus verlagen naar 191 zodat we op 191 * 4 = 764 bytes uitkomen.

Verlagen van $defaultStringLength

Voeg de volgende code toe in het bestand ‘app/Providers/AppServiceProvider.php’

use Illuminate\Support\Facades\Schema;

En in de method ‘boot’

Schema::defaultStringLength(191);

.
Als het goed is ziet je bestand er dan zo uit:

<?php
namespace App\Providers;

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

class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}

/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(191);
}
}

Plaats een reactie