使用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
    进来看了看,终于找到了自己想要的东西了.

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

root:password@/name?parseTime=True&loc=Local&charset=utf8root:password@/name?parseTime=True&loc=Local&charset=utf8mb4&collation=utf8mb4_unicode_ci

最后就完美解决了!!!