1

I'm using Laravel and when I try to run php artisan make:migrate it shows this error:

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 /Users/soksan/Desktop/TestLaravel/multiUsers/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")
/Users/soksan/Desktop/TestLaravel/multiUsers/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458

2 PDOStatement::execute()
/Users/soksan/Desktop/TestLaravel/multiUsers/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458

Please use the argument -v to see more details.

dferenc
  • 7,918
  • 12
  • 41
  • 49
Soksan Serey
  • 25
  • 1
  • 6
  • can you show us your migration code? – Carlos Fdev Oct 03 '18 at 09:28
  • please add the user migration code – parisssss Oct 03 '18 at 09:29
  • Possible duplicate of [Laravel migration: unique key is too long, even if specified](https://stackoverflow.com/questions/23786359/laravel-migration-unique-key-is-too-long-even-if-specified) – linktoahref Oct 03 '18 at 09:30
  • Possible duplicate of [#1071 - Specified key was too long; max key length is 767 bytes](https://stackoverflow.com/questions/29676724/1071-specified-key-was-too-long-max-key-length-is-767-bytes) – Gufran Hasan Oct 03 '18 at 09:57

3 Answers3

7

Go in the App\Providers\AppServiceProvider class and change the boot method to look like this

public function boot()
{
    Schema::defaultStringLength(191);
}
Yves Kipondo
  • 5,289
  • 1
  • 18
  • 31
4

Go to your laravel project and inside that project open App\Providers\AppServiceProvider class and change the boot method and add new schema show in the image.

Add this line at the top

use Illuminate\Support\Facades\Schema;

Replace this method

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

Go to AppServiceProvider.php

Manthan Patel
  • 1,784
  • 19
  • 23
1

Find the file config/database.php and change the charset and collation from utf8mb4 to utf8

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