使用golang的mysql无法插入emoji表情的问题

使用golang的mysql无法插入emoji表情

场景:使用golang 调用mysql储存emoji表情报错
环境:golang:go1.13.3 orm:GORM mysql客户端:Navicat

  • 开始的时候,客户端需要发送emoji表情,返回
    Incorrect string value: ‘\xF0\x9F\x98\x88 \xF0…’ for column ‘text’ at row 1
    看到这个信息的时候,第一反应肯定是mysql无法本身是无法支持emoji编码的,需要修改一下mysql的配置文件.

  • 然后开始百度这个消息,出现一大堆的回答,都是让我去修改mysql的ini.my文件中编码, 因为mysql原来的编码是utf8,这个文字编码为3个字节,但是emoji为 utf8mb4 是4个字节最后按照教程将mysql的配置文件修改了并且重启成功.
    发现发送emoji表情仍然还是报那个错,一开始我以为是自己配置不对,于是拼命地去找mysql配置,结果都是一样的.

  • 既然这样,我就将golang那边打印出来的insert语句拿下来直接到navicat中直接插入,结果神奇的成功了.这时候我以为应该好了,一切准备就绪后,发送普通消息–成功,激动地发送emoji–报错. 崩溃了;啥原因找不到,找了一个下午无疾而终.

  • 第二天不甘心继续找,各种单元测试,还是不行,最后还想了在golang中进行emoji编解码,但是编解码在本地测试的时候一切正常,但是经过网络通信后发现得到的字符不对,也懒得去解决了,还是想想这个如何将emoji入库的事情吧.

  • 又开始疯狂地百度,终于找到了一篇,有golang然后又有mysql和emoji的字眼,结果只是有一位仁兄碰到了跟我一样的难题:将mysql编码调整过后,手动在mysql中插入emoji正常,但是通过golang调用就报字节编码错误; 遗憾的是没人回答.最后怎么找都是这么一个含有golang 插入mysql emoji的文章;无奈想到了stackoverflow,去搜一下试试,golang insert emoji,还发现无结果.我要哭了.

  • 最后没办法,试试google吧,百度搜一下谷歌搜索,就会出现很多google镜像网站,然后进去搜了一下golang insert emoji,第一篇就是一个包含golang,mysql,emoji字眼的文章:
    https://hackernoon.com/today-i-learned-storing-emoji-to-mysql-with-golang-204a093454b7
    进来看了看,终于找到了自己想要的东西了.

最后根据他的和自己的过程总结一下:

  1. mysql这边照样按照原始的方式,将配置文件修改编码格式
  2. 重新创建数据库,并且设置数据库编码为utf8mb4 ,排序规则为utf8mb4_unicode_ci
    (这样的话,所有的表还有string字段都是这个编码格式,如果不想所有的都是,可以单独设置,这个不是重点.因为在navicat上都好设置,手动点一下就行了)
  3. 重点来了:golang中使用的是 github.com/go-sql-driver/mysql驱动,
    将连接mysql的dsn:(因为我这使用的是gorm,所以dsn可能跟原生的格式不太一样,不过没关系,只需要关注charset和collation就行了)
    root:password@/name?parseTime=True&loc=Local&charset=utf8
    修改为:
    root:password@/name?parseTime=True&loc=Local&charset=utf8mb4&collation=utf8mb4_unicode_ci

最后就完美解决了!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值