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方法实现配置