Laravel 5.4 migrate时报错: Specified key was too long error

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/249970.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot工具类

ClassPathResource 在类路径下读取资源 public final String getPath() public boolean exists() public InputStream getInputStream() WebUtils 获取web资源工具类 public static String getRealPath(ServletContext servletContext, String path) public static Object g…

MySQL中事物的详解

1. 事物的定义及特性 事务是一组操作数据库的SQL语句组成的工作单元,该工作单元中所有操作要么同时成功,要么同时失败。事物有如下四个特性,ACID简称“酸性”。 1)原子性:工作单元中所有的操作要么都成功,要…

记了老是忘记那就写下来吧宏任务微任务

宏任务:script 定时器 微任务:promiss process.nexttick new Promise(function(resolve){console.log(3);//此为同步程序resolve();//同步 是否异步 由内部函数决定console.log(4); }).then(function(){ //。then 异步console.log(5); });async function…

SPRING自定义注入CONTROLLER变量

问题描述 在SpringMVC中默认可以注入Model,ModelAndView,RequestParam,PathVariable 等,那么这个是怎么实现的,以及怎么注入一个自定义的参数呢 HandlerMethodArgumentResolver 在SpringMVC中有一个接口HandlerMethod…

进程,线程

import os, timeif __name__ __main__:print(the calling process id:%d % os.getpid())# 创建进程pid os.fork()if pid 0:# 子进程print(the child pid is %d % os.getpid())time.sleep(3)elif pid > 0:# 父进程os.wait() # 等待子进程终止print([%d]bye-bye % os.getpi…

livebos--iframe使用

新建一个方法。建一个参数&#xff0c;iframe控件&#xff0c;虚拟列。然后使用以下信息 <% livebos languagejavascript %>var url LB_ObjURI("Lb_lbOrganization",0,[],["NoTitle"]);var v {"edit" : "url ", "view"…

单行溢出 和多行溢出

/*单行溢出*/.one_txt_cut{overflow: hidden;white-space: nowrap;text-overflow: ellipsis;}.txt_cut{overflow : hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;}转载于:https://www.cnblogs.com/smzd/p/8491583…

Spring方法注入 @Lookup注解使用

情景分析 在Spring的诸多应用场景中bean都是单例形式&#xff0c;当一个单利bean需要和一个非单利bean组合使用或者一个非单利bean和另一个非单利bean组合使用时&#xff0c;我们通常都是将依赖以属性的方式放到bean中来引用&#xff0c;然后以Autowired来标记需要注入的属性。…

Jupyter配置步骤

Jupyter是基于浏览器的可交互式开发工具&#xff0c;在数据科学界非常受欢迎&#xff0c;它功能齐全&#xff0c;使用方便&#xff0c;是一款数据分析和建模挖掘的利器。 本文简介Jupyter的配置和使用过程 一、修改添加国内镜像 通常我会先安装Anaconda&#xff0c;再安装Jupyt…

edittext 属性

1.去掉edittext的底线&#xff0c;设置&#xff0c;不管是edittext&#xff0c;还是appcompatEdittext都是这个属性 转载于:https://www.cnblogs.com/hechangshou/p/9301004.html

定义高亮颜色

/*怎么定义高亮的颜色*/-webkit-tap-highlight-color: transparent;/*透明 其实就是不显示颜色*/-webkit-tap-highlight-color: red; 转载于:https://www.cnblogs.com/smzd/p/8491587.html

springboot 配置webservice接口

导入依赖的jar <!-- webservice cxf --><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>3.1.6</version></dependency><dependency><groupId>org…

【Django】认证系统

目录 #. auth模块1. 认证 authenticate()2. 登陆 login(HttpRequest, user)3. 注销 logout(request)4. 认证判断 is_authenticated()5. 登陆校验 login_requierd()6. 创建普通用户 create_user()7. 创建超级用户 create_superuser()8. 密码校验 check_password(password)9. 修改…

学习的目的是什么?

学习的目的是为了掌握生存的常识和技能&#xff0c;以便独立地面对世界&#xff1b; 学习的目的是为了遵从生活的规范和律则&#xff0c;以便和谐地与人相处&#xff1b; 学习的目的是为了探索生命的价值和意义&#xff0c;以便有尊严地立于天地之间。 你觉得为什么要学习呢&am…

span里面插入文字

.text-box span::before{ content:attr(data-text);} 转载于:https://www.cnblogs.com/smzd/p/8491664.html

Spring Boot 动态注入的两种方式

通过Profilespring.profiles.active spring.profiles.active&#xff1a;官方解释是激活不同环境下的配置文件&#xff0c;但是实际测试发现没有对应的配置文件也是可以正常执行的。那就可以把这个key当作一个参数来使用 Profile&#xff1a;spring.profiles.active中激活某配…

kernel devel 安装与卸载

1、查看系统内核 uname -r 2、查看已安装kernel-devel uname -a ; rpm -qa kernel\* | sort 3、下载对应的rpm wget xxx/kernel-devel-2.6.32-754.el6.x86_64.rpm 或者 $ sudo yum install "kernel-devel-uname-r $(uname -r)" 4、卸载已安装的内核 yum remove ker…

弹性布局

/* 开启弹性布局的换行 */ flex-wrap: wrap;/* 变为多行了 无法使用 align-items 进行位置设置 align-content 在多行的时候 设置属性 跟 justify-content 一模一样如果只有 一行时 无法生效 *//* 调整元素 在主轴上的 排布方式flex-end 到主轴的末尾flex-start 默认值center…

详解 vue-cli 的打包配置文件代码(给大家写写注释)

一、前言 对于webpack基础不好&#xff0c;node指令不通的童鞋。估计对自己搭建Vue、react脚手架是相当头疼的&#xff0c;有种无从下手的感觉。然而&#xff0c;从头看这2块&#xff0c;耗时太长&#xff0c;而且说实话得练才行&#xff0c;不练练手看不明白。那大多数人就采取…

AutoFac自动注入时报错

错误描述&#xff1a;An error occurred during the activation of a particular registration 解决办法&#xff1a;看到了particular这个单词&#xff0c;用我蹩脚的英语&#xff0c;估计是部分类&#xff1f;结合报错的两个类存在互相引用&#xff0c;这就明白了&#xff0c…