Mysql5.7 字符集、排序规则设置导致错误

35 篇文章 0 订阅
21 篇文章 0 订阅

一、报错信息及原因

错误输出信息,这是由于Mysql创建表时的字符集、排序规则方式和框架默认配置的不一致造成的:

  • MySQL 5.5.3之后增加了utfmb4字符编码,以前PHP版本、Mysql版本低的时候习惯性选择:
  • 资料表明,utf8和utfmb4差别不大,后者支持了一些emoji等特殊的字符,一般而言选谁都可以,我用laravel5.6版本的时候看到配置里默认使用utf8mb4:
General error: 1270 Illegal mix of collations (utf8_unicode_ci,COERCIBLE), (utf8_unicode_ci,IMPLICIT), (utf8mb4_unicode_ci,COERCIBLE) for operation

上述错误信息是由一下导致的,laravel操作数据表时报错:

return DB::update("UPDATE command SET response = CONCAT_WS('',response,?) WHERE id = ?",[$response, $id]);
//return DB::update("UPDATE command SET response = CONCAT_WS('',response,:response) WHERE id = :id",["response"=>$response, "id"=>$id]);
//CONCAT 遇到NULL即为NULL,所以选择CONCAT_WS替代。

上述语句过程就是将数据表已存在response值和最新传入的值拼接起来去更新,由于已存在的和最新的  配置不一致导致报错。

二、解决办法,框架配置和Mysql一致原则

1、如果是新项目,Mysql表还没有建立,使用如下,和框架默认的保持一致:

2、如果Mysql数据表已经建存在,老的数据表,那就修改框架里的配置,和Mysql保持一致:

 

最后:紧跟时代走,选择urf8mb4吧。。。。

关于它们的区别参考:Link 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值