Laravel 5.7 Cara Mengatasi Error 1071 Specified key was too long; max key length is 767 bytes | Beberapa waktu lalu saya mulai menggunakan Laravel versi 5.7 di Windows, kebetulan saya menggunakan MAMP sebagai local server environtment, namun artikel ini juga bisa Anda sesuaikan jika Anda menggunakan XAMPP atau layanan server lainnya.

Saya mencoba menginstall Laravel 5.7 dengan sangat sukses, saya dokumentasikan pada artikel sebelumnya yang berjudul Tutorial Cara Menginstall Laravel 5.7 di XAMPP Windows, namun ada satu masalah muncul ketika saya mencoba menjalankan perintah php artisan migrate, muncul error di command prompt(CMD) namun saya lihat di phpmyadmin ternyata 2 buah tabel tetap berhasil dibuat yaitu tabel migrations & user, itu artinya ada 1 tabel default yang tidak berhasil dibuat yaitu tabel password_resets.

Error pada laravel yang muncul ketika menjalankan php artisan migrate adalah sebagai berikut:


C:\www\mylaravel>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:\www\mylaravel\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:\www\mylaravel\vendor\laravel\framework\src\Illuminate\Database\Connection.php:458

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

  Please use the argument -v to see more details.

C:\www\mylaravel>

Atau Anda bisa lihat pada gambar dibawah ini.

Error laravel php artisan migrate

Ternyata error terjadi karena laravel versi terbaru membuat perubahan pada default character set di database, dimana sekarang menggunakan utf8mb4 yang sudah mendukung untuk penyimpanan emoji. Ini mempengaruhi aplikasi yang baru dan selama Anda menjalankan MySQL v5.7.7 atau lebih tinggi maka Anda tidak perlu melakukan apa-apa.

Untuk yang menjalankan MariaDB dan MySQL versi lawas maka error tersebut akan muncul.

Solusinya adalah dengan menambahkan beberapa baris pada file AppServiceProvider.php

Lokasi: app/Providers/AppServiceProvider.php

Edit file tersebut menjadi seperti berikut ini, dengan penambahan pada baris 6 dan 18 seperti yang sudah kami beri tanda dibawah ini.

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

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

Setelah itu saya hapus semua tabel yang ada database laravel saya, dan coba menjalankan perintah php artisan migrate lagi dan semua tabel sekarang berhasil dibuat :)

php artisan migrate sukses

Semoga membantu…