记一次Mysql字符集导致的Internal Server Error

在写完一篇博客后上传到服务器时突然来了个Internal Server Error 于是查看日志发现数据库报错
mysql.connector.errors.DatabaseError) 1366 (HY000): Incorrect string value: '\xF0\x9F\x99\x83
通过搜索发现是因为博文中有一个表情?,而在mysql5.53之前的utf8字符集是不支持emoji的,因为其最多支持3个字节,而这个emoji则大于3字节。不过我的服务器mysql版本是5.75,所以只要设置为utf8mb4字符集就可以了,设置方法网上有很多,比如MySQL数据库字符集由utf8修改为utf8mb4一例这一篇。

可是设置完之后连接数据库时又出现了一个奇怪的错误Unknown collation: 'utf8mb4_0900_ai_ci',这又是什么鬼?于是再次搜索,发现出错的都是8.x版和5.x版的字符排序不同而进行同步时出的错误,但是我并没有同步,而且本机8.x版数据库是一切正常的。这就意味着服务器上博客程序作为客户端跟mysql连接时出了问题,排查发现将数据库连接引擎有MySQL官方的mysqlconnector改为pymysql后问题得到解决。

果然,在MySQL官方论坛中搜索发现了这个问题,https://forums.mysql.com/read.php?50,677424,677981#msg-677981

Re: 8.0.17 bug: unknown collation utf8mb4_0900_ai_ci
Posted by: Nuno Mariz
Date: September 05, 2019 03:19AM

Hi, Yes, Connector/Python sets the collation to utf8mb4_0900_ai_ci
when utf8mb4 charset is used. This was changed in 8.0.17. Please use
collation=“utf8mb4_general_ci” in the connection options for older
MySQL versions.

是因为官方提供的python连接引擎Connector/Python在字符集被设置为utf8mb4时会将collation设置为utf8mb4_0900_ai_ci,而这在5.x版本设置collation-server = utf8mb4_unicode_ci时是不兼容的,应改为utf8mb4_general_ci

至此这个问题终于弄清并得以解决?。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值