最近忙活电商数据的接入接口,可以把各大电商的数据同步到我们本地的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
这是我一开始的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′}
这样就不会再出现问题了…
这个问题,我一般直接把非法字符都干掉
我遇到过这样的问题