Laravel 5.4默认使用utf8mb4字符编码,而不是之前的utf8编码。因此运行php artisan migrate 会出现如下错误:

[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table users add unique users_email_unique(email)) [PDOException] SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

问题根源

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

这也应该就是Laravel 5.4改用4字节长度的utf8mb4字符编码的原因之一。不过要注意的是,只有MySql 5.5.3版本以后才开始支持utf8mb4字符编码(查看版本:select version();)。如果MySql版本过低,需要进行版本更新。

注:如果是从Laravel 5.3升级到Laravel 5.4,不需要对字符编码做切换。

解决问题

  1. 升级MySql版本到5.5.3以上。
  2. 手动配置迁移命令migrate生成的默认字符串长度,在AppServiceProvider中调用Schema::defaultStringLength方法来实现配置:

        use Illuminate\Support\Facades\Schema; public function boot() { Schema::defaultStringLength(191); }

转载于:https://www.cnblogs.com/wntd/p/9297736.html

Laravel 5.4 migrate时报错: Specified key was too long error相关推荐

  1. Django >python manage.py migrate报错:(1064, “You have an error in your SQL syntax

    执行如下命令时报错(迁移数据库和表结构): python manage.py makemigrations python manage.py migrate 报错信息: django.db.migra ...

  2. Laravel5.6 migrate时报错 SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too

    Laravel 5.*默认使用utf8mb4字符编码,而不是之前的utf8编码.因此运行php artisan migrate 会出现如下错误: [Illuminate\Database\QueryE ...

  3. Python——下载数据集时报错解决:ContentTooShortError: <urlopen error retrieval incomplete: got only XX out of XX

    一.原因 网络不稳定,导致下载报错 二.解决办法 递归捕获异常,重新下载 三.实际操作: 在下载报错的urllib.request.urlretrieve(url,filename) 语句所在的代码文 ...

  4. linux防火墙401,解决git clone时报错:The requested URL returned error: 401 Unauthorized while accessing...

    版本问题,最直接的解决办法就是重新编辑安装git吧: 设置用户名和email git config --global user.name "zhucaixiang" git con ...

  5. mysql删除主键时报错_MySQL删除主键提示ERROR 1075 (42000)简单直观解决方案

    近日对MySQL语法进行了系统学习,不由得感叹仅仅3堂课的工夫就将自己曾经各种搜索.各种摸索耗费大量时间学习到的那点东西尽数囊括其中且进一步完善了知识系统. 也因此,看到本文的你如果想要提升自己,一定 ...

  6. (自己测试没有问题)解决git clone时报错:The requested URL returned error: 401 Unauthorized while accessing

    版本问题,最直接的解决办法就是重新编辑安装git吧: 1. 下载:# wget -O git.zip https://github.com/git/git/archive/v2.3.0.zip 2. ...

  7. SupeSite6.0.1_X-Space4.0.1聚合dz7.2后,打开空间时报错:

    SupeSite6.0.1_X-Space4.0.1聚合dz7.2后,打开空间时报错: SupeSite info: MySQL Query Error User: Guest Time: 2009- ...

  8. Untiy导入package时报错

    Untiy导入package时报错Failed to import package with error: Couldn't decompress package 解决方案: 1.包路径中存在中文名 ...

  9. 使用uiaotumator viewer 时报错 Remote object doesn't exist!

    使用uiaotumator viewer 时报错 Remote object doesn't exist! Error while obtaining UI hierarchy XML file: c ...

最新文章

  1. Node.js(nodejs)对本地JSON文件进行增、删、改、查操作(轻车熟路)
  2. C# 实现对接电信交费易自动缴费 续(winio/winring0 自动填密码)
  3. SQL 的执行顺序,记录一下。
  4. oracle和mysql文件怎么打开_Oracle vs Mysql--架构、sql查询执行流程及SQL解析顺序区别说明-sql文件怎么打开...
  5. 和49支战队瓜分600万奖金,这场史上奖金最多的AI大赛到底比什么?
  6. web前端培训分享:使用Dplayer实现Vue3中的视频及弹幕播放
  7. AC_Automata模板
  8. mysql怎么消除冗余,mysql剔除冗余数据
  9. php强制cookies,php Cookies操作类(附源码)
  10. 【Hadoop Summit Tokyo 2016】云上的大象
  11. php状态,PHP 状态模式 - 304158的个人空间 - OSCHINA - 中文开源技术交流社区
  12. python try exception类_python——异常类型
  13. 【ElasticSearch】Es 源码之 NodeService 源码解读
  14. pyqt5中控件缩放功能_python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例...
  15. 制作第一个HTML网页,2制作第一个HTML网页.ppt
  16. 圆柱与平面接触宽度_圆柱滚子轴承保持架锁爪变形引起的轴承故障
  17. aver函数C语言怎么用,C语言函数使用
  18. cad加载tiff影像插件_ENVI影像规则裁剪
  19. 海康威视摄像头激活失败的几个原因和方法
  20. Deep Learning(深度学习)学习笔记

热门文章

  1. python多进程与多线程实验
  2. array python 交集_python-数组之间的交集索引
  3. matlab给0数组赋值,MATLAB中怎么把一个函数的一部分赋值给一个变量或数组,比如怎么把sin(x)大于0的部分赋值给f....
  4. ACM算法--二分法--模板
  5. 数学--数论--积性函数(初步)
  6. 图论--SCC强连通缩点--Tarjan
  7. HDOJ 1176 免费馅饼 -- 动态规划
  8. 如何在Ubuntu系统的顶部标题栏中增加CPU/内存/网速实时监控的小控件
  9. 信用卡逾期记录已经超过5年,为何还不能申请贷款?
  10. 网贷申请技巧,提高90%通过率