laravel migrate时报错:Syntax error or access …
2018-12-06 07:34:35来源:博客园 阅读 ()
今天在学习laravel的路由模型绑定时,在按照文档执行php artisan migrate
时报错。
In Connection.php line 664:
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`) )
In Connection.php line 458:
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
原来,Laravel 5.4+默认使用utf8mb4字符编码,而不是之前的utf8编码。因此在运行php artisan migrate 会报出错误。
问题根源
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同样也可以手动配置迁移生成的默认字符串长度:
如果你正在运行的 MySQL release 版本低于5.7.7 或 MariaDB release 版本低于10.2.2 ,为了MySQL为它们创建索引,你可能需要手动配置迁移生成的默认字符串长度,你可以通过调用 AppServiceProvider 中的 Schema::defaultStringLength 方法来配置它,或者你可以为数据库开启 innodb_large_prefix 选项,有关如何正确开启此选项的说明请查阅数据库文档。
解决办法
1.MySQL版本升级至5.5.3以上
2.手动配置迁移命令migrate生成的默认字符串长度,在AppServiceProvider中调用Schema::defaultStringLength方法来实现配置(如果MySQL版本大于5.7.7就无需配置了):
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(191);
}
}
究其原因,还是MySQL版本太低了,如果是MySQL5.7.7及以上版本,就没有上面的问题啦,也不需要手动配置迁移命令migrate生成的默认字符串长度。
原文链接: Laravel migrate时报错: Syntax error or access violation: 1071 Specified key was too long
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- PHP empty函数报错解决办法 2020-03-04
- laravel实现批量更新多条记录的方法示例 2020-02-19
- Laravel中七个非常有用但很少人知道的Carbon方法 2020-02-15
- Laravel如何使用数据库事务及捕获事务失败后的异常详解 2020-02-08
- Laravel 中 “规范” 的开发短信验证码发送功能 2020-02-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash