laravel执行迁移文件报错 Syntax error or access violation: 1071 Specified key was too long

laravel框架5.4以上默认使用utf8mb4字符编码,因此在执行php artisan migrate 的时出现如下问题:  

    

 

问题根源:

  在于MySQL支持的utf8编码最大字符长度为3字节,如果遇到4字节宽度的宽字符就会出现插入异常。三个字节UTF-8 最大能编码的Unicode字符是0xffff,  即Unicode中的基本多文种平面(BMP)。因而包括Emoji表情在内的非基本多文种平面的Unicode字符都无法使用MySQL的utf-8字符集存储。

  mysql只有在5.5.3版本以后才开始支持utf8mb4字符编码

解决问题:

  1、确保mysql版本满足要求

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

 

posted @ 2018-04-12 18:30  初心未泯  阅读(278)  评论(0编辑  收藏  举报