环境:windows,python2.7,MySQL-python1.2.5,mysql5.7,django1.11.13
需求:支持将emoji表情存入数据库(emoji是4个字节编码,mysql的utf8最多3个字节,不支持,需改为utf8mb4)
步骤:
1,停止mysql服务(管理员运行cmd)
net stop mysql57
2,修改mysql的my.ini配置文件, linux下应该为my.cnf
windows下my.ini的路径为 ( 需要将隐藏的文件夹显示出来 ):
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
[client]
default-character-set = utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server=utf8mb4
collation-server = utf8mb4_unicode_ci
3,启动mysql服务
net start mysql57
4,修改django的源码
修改文件 C:\Python27\Lib\site-packages\django\db\backends\mysql\base.py
增加一行代码
def get_new_connection(self,conn_params):
conn= Database.connect(**conn_params)
conn.encoders[SafeText]= conn.encoders[six.text_type]
conn.encoders[SafeBytes]= conn.encoders[bytes]
conn.query("SET NAMES utf8mb4")
return conn
5,修改表结构字符,修改列字符,或者重新建表,并同步数据库结构。
自行搜索
6,其它
linux下运行django若还报错
2019, ""Can't initialize character set utf8mb4 (path: C:\\mysql\\\\share\\charsets\\)"")"
可能还需要修改mysql的Index.xml
<charset name="utf8">
改为
<charset name="utf8mb4">
没试过是否有用,这个是其它文档看来的,仅供参考。
参考文档:
1,https://www.chenshaowen.com/blog/using-utf8mb4-in-django-to-support-emoji-expression.html
网友评论