Logo Webbouw Plus

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

mei 14, 2020

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);
}
}

WEBBOUWPLUS

Marcel van Doornen - Freelance Laravel developer
Marcel van Doornen, freelance Laravel developer
Ben je benieuwd hoe ik jou kan helpen?
Neem contact met mij op