• IlluminateDatabaseQueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes


    IlluminateDatabaseQueryException : 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 AppProviders;
     4 
     5 use IlluminateSupportServiceProvider;
     6 use IlluminateSupportFacadesSchema;
     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】 IlluminateDatabaseQueryException : 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】 IlluminateDatabaseQueryException : 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 命令时,你可能会碰到下面这个错误:

    错误如下:

      IlluminateDatabaseQueryException  : 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 AppProviders;
    
    use IlluminateSupportServiceProvider;
    use IlluminateSupportFacadesSchema;
    
    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。

     
     
     
  • 相关阅读:
    【转】PHP foreach 小结
    【转】div,p,span,ul,li,dl,dt,dd,a,img,h,strong,em用法
    【转】网页制作中的CSS+DIV:dl,dt,dd分别表示什么意思啊?请说明啊,谢谢有什么功能?
    【转】[教程] CSS入门3:如何插入CSS样式
    PHP输出多个空格
    【转】浅谈HTTP中Get与Post的区别
    HDOJ 2433 Counter Strike 逆序对 线段树
    hdu 4193 Nonnegative Partial Sums 单调队列
    vijos 1750 建房子 单调队列
    poj 2155 Matrix 二维树状数组
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/12084441.html
Copyright © 2020-2023  润新知