网站首页 文章专栏

Laravel5.5--migrate报错:1071 Specified key was too l

Mr.hao
Mr.hao HSBLOG 2018-05-17 13:57:45

github找到一个项目,练习部署laravel和使用laravel的命令,

 php artisan smart:install

报错:SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long;1071.png

基本意思,字节长度过长,

1、会不会是数据库字符编码,基本字符集,排序规则不同,mysql版本过低?

SET character_set_client = utf8 ;
SET character_set_connection = utf8 ;
SET character_set_database = utf8 ;
SET character_set_results = utf8 ;
SET character_set_server = utf8 ;

SET collation_connection = utf8 ;
SET collation_database = utf8 ;
SET collation_server = utf8 ;
SELECT VERSION();#5.5.3

无果

2、https://segmentfault.com/a/1190000008416200,找到同样问题

MySql支持的utf8编码最大字符长度为3字节,如果遇到4字节的宽字符就会出现插入异常.

升级MySql版本到5.5.3以上。

手动配置迁移命令migrate生成的默认字符串长度,在AppServiceProvider中调用Schema::defaultStringLength方法来实现配置:

namespace App\Providers;

use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //###加入defaultStringLength###
        Schema::defaultStringLength(191);
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}


沟通交流
  • 消灭零回复