Solusi Mengatasi Error Laravel 5.4 Artisan Migrate

Selamat siang dan selamat datang kembali Laravel. Setelah sempet coba beberapa kali dan kemudian terlupakan kembali karena tuntutan pekerjaan yang harus cepet selesai, akhirnya bisa kembali ke Framework PHP satu ini. Kali ini mengenai posting mengenai Laravel 5.4 dimana terjadi error ketika melakukan migrate. Silahkan dilanjutkan bacanya.

Penjelasan kasus

Kasusnya adalah dimana kita diharuskan untuk melakukan migrate dan ternyata hasilnya tidak sesuai dengan harapan karena ada error seperti gambar dibawah ini.

l54_error1

Jadi sebenarnya apa yang terjadi? Menurut dokumentasi, ternyata pada versi 5.4 ini Laravel melakukan perubahan yaitu :

Laravel 5.4 uses the utf8mb4 character set by default, which includes support for storing “emojis” in the database. If you are upgrading your application from Laravel 5.3, you are not required to switch to this character set.

Yang kalau di Bahasa Indonesia kan sebagai berikut :

Laravel 5.4 menggunakan standar set karakter utf8mb4, yang sudah mendukung fitur penyimpanan “emoji” di dalam database. Jika anda melakukan upgrade aplikasi dari Laravel 5.3, anda tidak diharuskan untuk mengubah ke set karakter.

Berdasarkan dokumentasi juga dijelaskan hal ini hanya berpengaruh kepada pengguna yang menggunakan versi MySQL 5.7.7 atau MariaDB 10.2.2. Jadi jika teman teman menggunakan database yang diatasnya, seharusnya tidak terjadi error semacam ini.

Hal itu menjelaskan mengenai set karakter (character set) yang digunakan oleh Laravel 5.4 ini, lalu hubungannya dengan error apa ya? Tentunya hal ini memiliki dampak yang jelas karena setiap set karakter memiliki karakteristik masing masing. Secara umum perbedaannya adalah :

Set karakter utf8 menggunakan maksimum 3 bytes per karakter dan hanya dapat berisi karakter BMP. Sedangkan set karakter utf8mb4 menggunakan 4 bytes per karakter dan mendukung penyimpanan karakter pelengkap (supplementary characters)

Detail lebih lanjut : Dokumentasi MySQL utf8mb4

 

Solusi

Setelah tau jelas mengenai masalahnya apa, sekarang solusinya bagaimana? Berikut adalah beberapa solusi yang bisa digunakan pada kasus ini :

1. Upgrade Versi MySQL atau MariaDB

Sesuai dengan dokumentasi dari Laravel, jika memang bisa dilakukan upgrade versi maka silahkan lakukan upgrade versi MySQL atau MariaDB teman teman.

Hal ini tentunya bisa dilakukan jika kita memiliki kemampuan atau keinginan untuk melakukan upgrade. Nah kalau nggak gimana? Jawabannya :

2. Bertahan pada set karakter utf8

Artinya kita tidak menggunakan set karakter baru yang ditetapkan oleh Laravel 5.4 dan tetap menggunakan kset karakter lama yaitu utf8. Tapi untuk dapat melakukan hal tersebut kita diharuskan untuk mengubah sedikit pengaturan di file database.

Silahkan buka file config/database.php kemudian ubah isi dari 2 line berikut :

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

Ubah menjadi seperti :

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

Nah ternyata ada lagi solusi yang keren yaitu :

3. Menggunakan utf8mb4 tanpa upgrade

Penggunaan set karakter baru tetap dapat dinikmati tanpa melakukan upgrade, namun sama seperti solusi kedua kita tetap diharuskan untuk melakukan sedikit modifikasi pada sistem Laravel.

Silahkan buka file app/Providers/AppServiceProvider.php dan lakukan beberapa penambahan. Pada bagian atas setelah string use Illuminate\Support\ServiceProvider;  teman teman harus menambahkan string sebagai berikut :

use Illuminate\Support\Facades\Schema;

Fungsinya adalah untuk mendefinisikan namespace path kelas Schema. Jika tidak ditambahkan maka teman teman akan disuguhi lagi dengan informasi error sebagai berikut :

l54_error2.png

 

Setelah itu, silahkan tambahkan string dibawah ini pada fungsi boot() :

Schema::defaultStringLength(191);

 

Jadi secara keseluruhan file AppServiceProvider.php akan menjadi sebagai berikut :

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

 

Penutup

Demikianlah posting kali ini mengenai solusi mengatasi error Laravel 5.4 artisan migrate semoga dapat membantu teman-teman semua. Selamat siang. 🙂

 

Referensi

  1. https://laracasts.com/discuss/channels/laravel/laravel-54-failing-on-php-artisan-migrate-after-php-artisan-makeauth
  2. https://laracasts.com/discuss/channels/laravel/php-artisan-migrate-errorclass-appprovidersschema-not-found?page=1
  3. http://geektnt.com/2017/01
  4. https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html
Advertisements

One thought on “Solusi Mengatasi Error Laravel 5.4 Artisan Migrate

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s