Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes

一、总结

一句话总结:

在 AppServiceProvider.php 文件里的 boot 方法里设置一个默认值:Schema::defaultStringLength(191); 还有记得引入Schema



1 <?php
2
3 namespace App\Providers;
4
5 use Illuminate\Support\ServiceProvider;
6 use Illuminate\Support\Facades\Schema;
7
8 class AppServiceProvider extends ServiceProvider
9 {
10 /**
11 * Bootstrap any application services.
12 *
13 * @return void
14 */
15 public function boot()
16 {
17 //
18 Schema::defaultStringLength(191);
19 }
20
21 /**
22 * Register any application services.
23 *
24 * @return void
25 */
26 public function register()
27 {
28 //
29 }
30 }


 

1、laravel中的服务器提供者是什么?

Service Providers (服务提供者) 是 Laravel 「引导」过程的核心。这个「引导」过程可以理解成「电脑从按下开机按钮到完全进入桌面」这段时间系统干的事。

 

2、laravel服务提供者中两个重要的方法register()和boot()分别是做什么的?

register() :注册服务,比如注册kernel文件里面的内容
boot() :引导服务,比如这里的设置默认字符串长度:Schema::defaultStringLength(191);

 

 

3、laravel中的schema是什么?

Laravel 的Schema门面提供了与数据库系统无关的创建和操纵表的支持,在 Laravel 所支持的所有数据库系统中提供一致的、优雅的、平滑的API。

 

 

 

二、【laravel5.6】 Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes

博客对应视频位置:laravel疑难问题

https://fanrenyi.com/lesson/9

在进行数据迁移时候报错: 特殊字段太长报错,



php artisan migrate


现在utf8mb4包括存储emojis支持。如果你运行MySQL v5.7.7或者更高版本,则不需要做任何事情。

当你试着在一些MariaDB或者一些老版本的的MySQL上运行 migrations 命令时,你可能会碰到下面这个错误:

错误如下:



Illuminate\Database\QueryException  : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes


解决办法: 

我们可以在 AppServiceProvider.php 文件里的 boot 方法里设置一个默认值:

文件路径: /app/providers/AppServiceProvider.php,加上绿色部分即可



<?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()
{
//
}
}


 

三、补充知识

1、service provides(服务提供者)

​Service Providers (服务提供者)​​ 是 ​​Laravel​​ 「引导」过程的核心。这个「引导」过程可以理解成「电脑从按下开机按钮到完全进入桌面」这段时间系统干的事。

 

​Service Provider​​ 有两个重要的方法:

register() :注册服务

boot() :引导服务

 

​Laravel​​ 在「引导」过程中干了两件重要的事:

  1. 通过 ​​Service Provider​​ 的 ​​register()​​ 方法注册「绑定」,比如kernel文件中的
  2. 所有 ​​Servier Provider​​ 的 ​​register()​​ 都执行完之后,再通过它们 ​​boot()​​ 方法,干一些别的事。

 

2、Schema是什么

Laravel 的Schema门面提供了与数据库系统无关的创建和操纵表的支持,在 Laravel 所支持的所有数据库系统中提供一致的、优雅的、平滑的API。