MySQL数据库无法通过 utf8mb4 连接的解决方式

环境:阿里云 centos 6.5 mysql 5.6 python
问题:通过uri里面设置 charset=utf8mb4 连接数据库时,发生问题

Character set ‘utf8mb4’ is not a compiled character set and is not specified in the ‘/path/mysql/charsets/Index.xml’ file

经排查,是使用的mysql-devel 的版本是 5.1.73,太老导致。可通过如下命令查询其版本

rpm -qa | grep mysql

于是将其卸载,重装,发现 阿里云的默认源重装还是 5.1.73 的老版本,于是加入官方源

rpm -Uvh http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm

安装完之后,运行发生“libmysqlcilent_r.so.16 No such file or directory”这个错误。
查了一下,现在有的库文件是 libmysqlcilent_r.so.18,网上的一种解决方法是用软链接,把 18的版本变为 16,但我并不认为这是个好方法。
于是重装 python 的 mysqlclient库,结果,之前我用的是阿里的镜像,重装之后还是老问题,怀疑是cache导致安装的版本有误。于是把镜像的引用删除之后,重装ok了!也有一个方法,就是重装的时候,用

pip install mysqlclient –no-cache-dir

来禁止使用cache,重新编译新的。

然后一切正常,数据库可以存储emoji图像了。
这里有个注意点,mysql的varchar类型,一般在utf8下面,最长支持到255,但如果是utf8mb4,只有191了。
鉴于emoji的普及,数据库默认应该都转为 utf8mb4 编码,网上有篇不错的分享,以后有空了,翻译一下,当二道贩子。


版权声明:本文为u014084065原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。