美文网首页
Django MySQL 存储emoji字符

Django MySQL 存储emoji字符

作者: 谢耳朵_X | 来源:发表于2018-07-05 11:01 被阅读43次

环境: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

2,http://www.queasy.me/programming/questions/36144026/unable+to+use+utf8mb4+character+set+with+cloudsql+on+appengine+python

3,https://chowyi.com/2016/02/04/Django%E4%B8%AD%E4%BD%BF%E7%94%A8emoji%E4%B9%B1%E7%A0%81-MySQL%E5%AD%98%E5%82%A8/

相关文章

网友评论

      本文标题:Django MySQL 存储emoji字符

      本文链接:https://www.haomeiwen.com/subject/uknuuftx.html