2018-08-24T18:50:59Z||2018-08-24T18:50:59Z


这个Incorrect string value 'xxx' for column十有八九是因为MySQL的Column编码不是标准UTF8的问题。不过经过检查table发现,table对应的column的encoding就是UTF8啊,collation也是utf8_unicode_ci啊,为什么还会出现这类问题?

原来,MySQL(包括MariaDB)有好几处可能影响编码处理的配置项,可以参考这个问题。只有这些配置项都正确了才能真正确保UTF8数据被正确处理。当然,就一个万能且省力的方式就是在连接成功后先执行SET NAMES utf8mb4. 对于本文针对的driver: go-sql-driver. 可以在连接字符串(Data source name)中加入charsetcollation参数来确保万无一失。

比如这个连接字符串:

root:123456@tcp(localhost:3306)/mydb?parseTime=true&collation=utf8_unicode_ci&charset=utf8mb4

{ true}