Laravel5.6 migrate时报错 SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too
Laravel 5.*默认使用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字节长度的utf8mb4
字符编码的原因之一。不过要注意的是,只有MySql 5.5.3版本以后才开始支持utf8mb4
字符编码(查看版本:select version();
)。如果MySql版本过低,需要进行版本更新。
解决方法一:
- 升级MySql版本到5.5.3以上。
手动配置迁移命令
migrate
生成的默认字符串长度,在AppServiceProvider
中调用Schema::defaultStringLength
方法来实现配置:use Illuminate\Support\Facades\Schema;public function boot(){Schema::defaultStringLength(191);}
解决方法一:
config/database.php文件中 msql配置信息修改 chartset,collation
'mysql' => ['driver' => 'mysql','host' => env('DB_HOST', '127.0.0.1'),'port' => env('DB_PORT', '3306'),'database' => env('DB_DATABASE', 'forge'),'username' => env('DB_USERNAME', 'forge'),'password' => env('DB_PASSWORD', ''),'unix_socket' => env('DB_SOCKET', ''),// 'charset' => 'utf8mb4', //修改前 // 'collation' => 'utf8mb4_unicode_ci', //修改前 'charset' => 'utf8',//修改后 'collation' => 'utf8_unicode_ci',//修改后 'prefix' => '','strict' => true,'engine' => null, ],
Laravel5.6 migrate时报错 SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too相关推荐
- PDOException::(“SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long;
运行php artisan migrate报错 PDOException:: ("SQLSTATE[42000]: Syntax error or access violation: 107 ...
- SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length
app/Providers/AppServiceProvider.php 设置默认长度 <?phpnamespace App\Providers;use Illuminate\Support\ ...
- Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1071
Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specifi ...
- tp报错: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is
这是报错信息:SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not i ...
- MySQL SQLSTATE[42000]: Syntax error or access violation: 1286 Unknown table engine 'InnoDB' 错误的原因及解决
博客搬家:由于各种原因,我现在的博客将首发于blog.mojijs.com, 可以百度搜索 "姜哥的墨迹技术博客" , 或者 点击这里 本文首发地址 http://blog.moj ...
- MySQL错误:SQLSTATE[42000]: Syntax error or access violation
MySQL错误:SQLSTATE[42000]: Syntax error or access violation: 问题描述: 查询数据是遇到这个问题(mysql5.7) 原因分析: 后面查资料才知 ...
- MySQL laravel,MySQL错误:SQLSTATE[42000]: Syntax error or access violation
解决办法: 1 修改MySQL配置文件sql_mode="" 2 发现 laravel 依然报错是因为laravel mysql 数据库开启了严格模式,导致很多 mysql 语句可 ...
- yii2 Syntax error or access violation: 1071 Specified key was too long Syntax error or access violat
我报错的是table %widget_text 修改的字段是key 设置起长度为191 eg: 'key' => $this->string(191)->notNull(),
- laravel使用php artisan migrate 报错 SQLSTATE[42000]的解决方式
执行命令:php artisan migrate 或相关 问题报错: Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax erro ...
最新文章
- Hibernate 入门小案例
- php输出mysqli查询出来的结果
- Excel催化剂回顾2019年产出(文章合集),展望2020年
- 为什么黑客都用python-黑客编程为什么首选Python语言?这里告诉你答案!
- 一行命令开启VNC 和windows之间复制粘贴功能
- html表格之个人简历
- 爱签电子合同电子签章助力银行数智化发展
- deeplink唤醒app测试软件,短信跳转app-DeepLink
- bam获取序列_bam格式文件处理大全(四)
- php将一维数组转换成二维数组
- Unity+NGUI性能优化方法总结
- seaborn可视化01,涵盖几乎所有用法
- hacker入门专业术语
- ~4.2 ccf 2021-12-1 序列查询
- 推荐收藏:河海大学物联网工程学院历年复试线汇总
- 2021.9.9科研日志
- 关于position中图标或者图片定位不准确,如何调准定位中心点
- 暖暖老显示连接服务器失败,闪耀暖暖登录失败原因 闪耀暖暖登录失败解决办法...
- 计算机专业成长计划书,计算机专业学习计划书
- 光庭2021c语言笔试题,上海市闵行区莘松中学2020—2021学年八年级下学期期中考试语文试题.docx...