django存储emoji表情时遇到的Incorrect string value问题

最近忙活电商数据的接入接口,可以把各大电商的数据同步到我们本地的Elasticsearch…. 也是个蛋疼的事情…

中间遇到个小问题. 在入库的时候遇到了问题,总是会爆  Incorrect string value: ‘\\xF0\\x9F\\x90\\xA8′ for column ‘signature’ at row 1   的问题..  这些是因为jd taobao的一些评论里面含有表情,emoji的图标。 这些个表情都是emoji,不能用utf8的,需要用utf8mb4,大家放心utf8mb4是兼容utf8,这是他的存储的字节从3字节变成了4字节而已。 


emoji的样子在python下居然可以直接显示表情,挺有趣…



xiaoru.cc

xiaoru.cc

xiaoru.cc

xiaoru.cc
这是我一开始的mysql的解码,基本是latin1的解码… …

mysql> SHOW VARIABLES LIKE ‘character_set_%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
7 rows in set (0.00 sec)
 
mysql> SHOW VARIABLES LIKE ‘collation_%’;
+———————-+——————-+
| Variable_name | Value |
+———————-+——————-+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+———————-+——————-+
3 rows in set (0.00 sec)

我们可以直接set为utf8mb4 …

set character_set_database=utf8mb4

set collation_database=utf8mb4_unicode_ci

当然最好还是在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  

这样重启后,就万无一失了,其实以后创建库的时候和以前一样就可以了,当然你可以在create database 语句追加character set utf8mb4编码。

创建数据库时编码设置
mysql> create database name character set utf8mb4;

默认用utf8mb4
mysql> alter table type character set utf8mb4;

转换表为 utf8mb4
mysql>  ALTER TABLE api_shopdata CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

修改一下django的settings.py,在数据库的配置中加入options项。

‘OPTIONS’: {‘charset’:'utf8mb4′}  

这样就不会再出现问题了…

2 Responses

  1. 莱茵自由者 2015年4月7日 / 上午8:53

    这个问题,我一般直接把非法字符都干掉

  2. 雨过天晴 2015年4月4日 / 上午8:08

    我遇到过这样的问题

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">