微信扫一扫打赏支持

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

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

 

转自或参考:【laravel5.6】 Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
https://www.cnblogs.com/richerdyoung/p/9167078.html

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

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。

 
 
 
posted @ 2019-12-23 16:25  范仁义  阅读(287)  评论(0编辑  收藏  举报