Mysql laravel错误1071键太长php artisan migrate

Mysql laravel错误1071键太长php artisan migrate,mysql,php-7,wampserver,laravel-7,Mysql,Php 7,Wampserver,Laravel 7,我使用的是Laravel,我有迁移功能: public function up() { Schema::create('products', function (Blueprint $table) { $table->increments('id'); $table->string('title')->unique(); $table->string('slug')->u

我使用的是Laravel,我有迁移功能:

public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title')->unique();
            $table->string('slug')->unique();
            $table->string('subtitle');
            $table->integer('price');
            $table->text('description');
            $table->boolean('featured')->default(false);
            $table->timestamps();
 
        });
    }            
当我在cmd上执行“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 La clé est trop longue. Longueur maximale: 1000 (SQL: alter table `users` add unique `users_username_unique`(`username`))

  at C:\Users\linda\lynda-master\vendor\laravel\framework\src\Illuminate\Database\Connection.php:671
    667|         // If an exception occurs when attempting to run a query, we'll format the error
    668|         // message to include the bindings with SQL, which will make this exception a
    669|         // lot more helpful to the developer instead of just the database's errors.
    670|         catch (Exception $e) {
  > 671|             throw new QueryException(
    672|                 $query, $this->prepareBindings($bindings), $e
    673|             );
    674|         }
    675|

  1   C:\Users\linda\lynda-master\vendor\laravel\framework\src\Illuminate\Database\Connection.php:464
      PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1071 La clé est trop longue. Longueur maximale: 1000")

  2   C:\Users\linda\lynda-master\vendor\laravel\framework\src\Illuminate\Database\Connection.php:464
      PDOStatement::execute()                                  
我将其添加到我的AppServiceProvider中

<?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);
    }
}                                    
我的.env看起来像

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel-ecommerce
DB_USERNAME=root
DB_PASSWORD=                                   
我已经取消了对扩展的注释;extension=pdo_mysql在我的php.ini中我正在使用wamp服务器,并且已经尝试了以下方法:

php artisan cache:clear                    
php artisan config:clear                      
php artisan config:cache 
当我使用mariaDB而不是mysql来创建数据库时,我得到了这个错误 未知数据库

 Illuminate\Database\QueryException

  SQLSTATE[HY000] [1049] Base 'laravel-ecommerce' inconnue (SQL: select * from information_schema.tables where table_schema = laravel-ecommerce and table_name = migrations and table_type = 'BASE TABLE')

  at C:\Users\linda\lynda-master\vendor\laravel\framework\src\Illuminate\Database\Connection.php:671
    667|         // If an exception occurs when attempting to run a query, we'll format the error
    668|         // message to include the bindings with SQL, which will make this exception a
    669|         // lot more helpful to the developer instead of just the database's errors.
    670|         catch (Exception $e) {
  > 671|             throw new QueryException(
    672|                 $query, $this->prepareBindings($bindings), $e
    673|             );
    674|         }
    675|

  1   C:\Users\linda\lynda-master\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:70
      PDOException::("SQLSTATE[HY000] [1049] Base 'laravel-ecommerce' inconnue")

  2   C:\Users\linda\lynda-master\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:70
      PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=laravel-ecommerce", "root", "", [])

此问题可能是由于Mariadb或旧版本的MySQL造成的

解决方案1:

编辑AppServiceProvider.php位于
/app/Providers/AppServiceProvider.php的文件,并在引导方法内部更新默认字符串长度:

// import builder where defaultStringLength method is defined
use Illuminate\Support\Facades\Schema;

public function boot()
{
    // Fix for MySQL < 5.7.7 and MariaDB < 10.2.2
    Schema::defaultStringLength(191); //Update defaultStringLength
}


希望其中一个解决方案对您有效

谢谢你的回复,但是当我按照你说的那样做时,我得到了一个错误:public function boot(){defaultStringLength;}那么什么对你有用呢?我已经改成了mariaDB,但它给了我未知的数据库我通过改变mysql的版本解决了这个问题我希望有一天它会帮助别人非常感谢你
// import builder where defaultStringLength method is defined
use Illuminate\Support\Facades\Schema;

public function boot()
{
    // Fix for MySQL < 5.7.7 and MariaDB < 10.2.2
    Schema::defaultStringLength(191); //Update defaultStringLength
}
'engine' => null',
'engine' => 'InnoDB ROW_FORMAT=DYNAMIC',