MAMP升级Mysql版本,从而解决不支持utf8mb4问题 - konakona
konakona
Dream Afar.
konakona

MAMP升级Mysql版本,从而解决不支持utf8mb4问题

MAMP升级Mysql版本,从而解决不支持utf8mb4问题

今天开始做Vape工具的采集部分,被Laravel5.7最新的Dump Server吸引,不得不说这个真的是太牛逼了!毅然决然的安装了Laravel 5.7 。但是在执行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

问题出在users表的users_email_unique字段类型上,从Laravel 5.4开始默认使用utf8mb4字符编码,而不是之前的utf8编码了。

要说我之前用5.4一直到5.6的时候为什么没有遇到这个问题呢,当时的项目都是copy之前的数据库的,而且我一直都有用utf8bm4的习惯(为了支持emoji)所以就没有用到migrate。

 

于是我上网搜了一圈,比如这篇,大部分说的是MYSQL版本大于5.6,或5.5.3以上就能正常运行了。但是我本机MYSQL就是5.6.35,远大于这些文章所指的mysql版本,还是不能运行,搞了半天Laravel要求的是Mysql版本是5.7.7及以上(参见官方说明),这些搜索到的结果其根本问题在于Mysql版本可用性的错误提示。

https://blog.img.crazyphper.com/2019/01/D5821299-C7E1-4A8A-9BB8-4B72E392601A-800x311.jpeg
https://blog.img.crazyphper.com/2019/01/4AD62B0F-E8F0-4945-8F60-E12E882057C3.jpg

但是这些文章中通过修改AppServiceProvider文件的解决方案是可行的,大家可以参考文章去解决。

 

或者自己创建或者Copy别人的users表结构(migrate命令一共就创建3个表,执行失败也会创建成功2个表,就还剩一个users表)。比如Laravel5.7的users表结构:

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `email_verified_at` timestamp NULL DEFAULT NULL,
  `password` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `users_email_unique` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

 

 

而我这里选择升级MAMP大象的MYSQL版本。

 

通过brew安装Mysql,默认装的就是最新的,然后再用软链接映射到MAMP里,缺点是不能通过MAMP界面点“Server”来启动服务了,得走命令行。

brew install mysql

需要手动设置一下root用户的密码,跟着步骤设置就行,见下图提示。

https://blog.img.crazyphper.com/2019/01/963C61CE-C506-49B1-AD04-54D953CEB973.jpg

启动mysql:

brew services start mysql

找到mysql.sock然后做符号连接到mamp里面:

ln -s /tmp/mysql.sock /Applications/MAMP/tmp/mysql

然后直接重启web服务器就可以了,不要使用mamp界面启动服务,因为那样会替换掉mysql.sock

sudo httpd -k start

此时已经成功使用5.7的mysql了,不过这个做法还不够完美,缺点是MAMP的Server启动变成命令行手动了。日后再看看还有没有好的解决方法。

赞赏
#
首页      程序开发      SQL      MAMP升级Mysql版本,从而解决不支持utf8mb4问题

团哥

文章作者

继续玩我的CODE,让别人说去。 低调,就是这么自信。

发表回复

textsms
account_circle
email

konakona

MAMP升级Mysql版本,从而解决不支持utf8mb4问题
Since Laravel 5.4,Specified key was too long error.
扫描二维码继续阅读
2019-01-02