zoukankan      html  css  js  c++  java
  • Django1.10+Mysql 5.7存储emoji表情,报Incorrect string value: '\xF0\x9F\x90\xA8' for column 'signature' at row 1的解决方法

    问题:

      在做webapp项目的时候,用户提交emoji数据,控制台报错:Incorrect string value: '\xF0\x9F\x90\xA8' for column 'signature' at row 1。

    原因:

      原mysql数据库的编码格式是utf8,mysql在存储数据的时候用的是3个字节去存储。而emoji表情要用4个字节的utf8,也就是utf8mb4格式。

    解决方法:

      首先需要修改mysql的配置文件: windows--> my.ini  linux-->/etc/mysql/my.cnf 

    [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  

    然后重启,mysql,查看mysql编码:

    SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

    修改完数据库后,创建数据库:

    create database database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;  

    在查看django源码中:django/db/backends/mysql/base.py 中的DatabaseWrapper类中有个kwargs的属性,里面有个key叫charset,默认值是utf8,后面做数据库连接的时候,会用django的settings中,database的options去更新这一项。

    class DatabaseWrapper(BaseDatabaseWrapper):  
      
        def get_connection_params(self):  
            kwargs = {  
                'conv': django_conversions,  
                'charset': 'utf8',  
            }  

    因此需要修改Django--settings中mysql 连接:

    在数据库连接配置中增加options项:

    'OPTIONS':{'charset':'utf8mb4'},

    再次尝试 成功!

    对于mysql数据库格式为utf8且已经存在数据的情况:

    1、修改mysql 配置文件,重启

    2、将数据库编码格式更新为utf8mb4

    ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

    3、再将对应的表编码格式更新为utf8mb4

    ALTER TABLE  table_name  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

    4、修改django--settings中mysql连接,增加

    'OPTIONS':{'charset':'utf8mb4'},

    5、尝试,可成功!

  • 相关阅读:
    和菜鸟一起学产品之产品经理的自我管理能力
    和菜鸟一起学产品之产品经理的工作职责
    遗传算法解决TSP问题实现以及与最小生成树的对比
    双系统或三系统:Grub Rescue修复方法
    err:安装程序试图挂载映像 1(缺少ISO 9660图像)
    OpenCV手写数字字符识别(基于k近邻算法)
    最小生成树
    ubuntu12.04:Tomcat 7服务器:手动安装
    ubuntu12.04:jdk7:手动安装
    ubuntu12.04:Mysql数据库:手动安装
  • 原文地址:https://www.cnblogs.com/os-python/p/6831478.html
Copyright © 2011-2022 走看看