laravel错误1071 Specified key was too long; max key length is 1000 bytes
Laravel 5.5 环境,php artisan migrate 之后,出现错误如题。
检查了一下,代码是这样的:
            $table->increments('id');
            $table->string('username')->uniq();
            $table->string('email')->nullable()->uniq();
            $table->text('avatar_url')->nullable();
            $table->string('phone')->nullable();
            $table->string('password');
            $table->text('intro')->nullable();
            $table->timestamps();
最后,把 uniq() 取消后,功能正常了。
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字符编码(查看版本:selection version();)。如果MySql版本过低,需要进行版本更新。
注:如果是从Laravel 5.3升级到Laravel 5.4,不需要对字符编码做切换。
解决问题
升级MySql版本到5.5.3以上。
手动配置迁移命令
migrate生成的默认字符串长度,在AppServiceProvider中调用Schema::defaultStringLength方法来实现配置:use Illuminate\Support\Facades\Schema; /**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(191);
}
laravel错误1071 Specified key was too long; max key length is 1000 bytes的更多相关文章
- laravel 错误 1071 Specified key was too long; max key length is 1000 bytes
		
laravel 执行 php artisan migrate 安装数据库报 1071 Specified key was too long; max key length is 1000 bytes ...
 - laravel migrate时报错:Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
		
今天在学习laravel的路由模型绑定时,在按照文档执行php artisan migrate时报错. In Connection.php line 664: SQLSTATE[42000]: Syn ...
 - OpenStack安装keyston 错误BError: (pymysql.err.InternalError) (1071, u‘Specified key was too long; max key length is 767 bytes‘) [SQL: u‘\nCREATE TABLE migrate_ver
		
折腾了两天的错误,BError: (pymysql.err.InternalError) (1071, u‘Specified key was too long; max key length is ...
 - laravel报错1071 Specified key was too long; max key length is 1000 bytes
		
Laravel 默认使用utf8mb4字符编码,而不是的utf8编码.因此运行php artisan migrate会出现如下错误: [Illuminate\Database\QueryExcepti ...
 - flask建表遇到的错误: flask,sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1071, 'Specified key was too long; max key length is 767 bytes')
		
error:flask,sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1071, 'Specifie ...
 - MySQL错误“Specified key was too long; max key length is 1000 bytes”的解决办法
		
MySQL错误"Specified key was too long; max key length is 1000 bytes"的解决办法 经过查询才知道,是Mysql的字段设置 ...
 - ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
		
今天在MySQL 5.6版本的数据库中修改InnoDB表字段长度时遇到了"ERROR 1071 (42000): Specified key was too long; max key le ...
 - 导入sql文件报错:1071 Specified key was too long; max key length is 767 bytes
		
ref: https://stackoverflow.com/questions/1814532/1071-specified-key-was-too-long-max-key-length-is-7 ...
 - 索引长度过长 ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
		
1.发现问题 今天在修改innodb表的某个列的长度时,报如下错误: alter table test2 modify column id varchar(500); ERROR 1071 (4200 ...
 
随机推荐
- 大数据入门到精通1--大数据环境下的基础文件HDFS 操作
			
1.使用hdfs用户或者hadoop用户登录 2.在linux shell下执行命令 hadoop fs -put '本地文件名' hadoop fs - put '/home/hdfs/sample ...
 - 解题7(FindFirstOnlyOne)
			
题目描述 找出字符串中第一个只出现一次的字符 输入描述: 输入一个非空字符串 输出描述: 输出第一个只出现一次的字符,如果不存在输出-1 示例1 输入 asdfasdfo 输出 o 代码如下: pac ...
 - js增减日期
			
参考 https://www.cnblogs.com/gmq-sh/p/5194706.html date.setDate(date.getDate() + 3);
 - php 两个值进行比较的问题
			
php手册运算符中有介绍: 比较多种类型-- 如var_dump([ ] > 0); // 结果为true 运算数 1 类型 运算数 2 类型 结果 null 或 string string 将 ...
 - apache 多并发测试
			
进入到apache的bin目录打开 temp.bat 如果没有,新建temp.bat,打开输入 命令:ab -c 一次并发的数量 -n 总共请求的数量 请求的地址 例:ab -c 10 -n 100 ...
 - pta l2-11(玩转二叉树)
			
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805065406070784 题意:给定二叉树的结点个数n,其前 ...
 - Python+Selenium学习--前进和后退
			
场景 这两个功能一般不太常用.所能想到的场景大概也就是在几个页面间来回跳转,省去每次都get url. 代码 #!/usr/bin/env python # -*- coding:utf-8 -*- ...
 - mysql数据库分区及测试
			
1. 测试数据库是否支持分区 mysql可以通过下面语句判断是否支持分区: SHOW VARIABLES LIKE '%partition%'; 如果输出:have_partitioning YE ...
 - Netty实践二(心跳检测)
			
我们使用Socket通信一般经常会处理多个服务器之间的心跳检测,一般来讲,我们去维护服务器集群,肯定要有一台或几台服务器主机(Master),然后还应该有N台(Slave),那么我们的主机肯定要时时刻 ...
 - vue  router返回上一页
			
this.$router.go(-1) 不用router时,使用window.history.go(-1);