本来以为我搞回英文就不会再被编码坑了,事实证明我还是太年轻了手动再见.gif
用推特api抓取推文后存入mysql数据库,出现了一些空白内容,检查之后发现凡是以emoji开头的text存入数据库的时候会变为空。为了排除问题先在推特提供的控制台里试了试有问题的推文,结果发现它抓下来的内容是正常的,又在phpstorm里试了试直接打印出抓取内容,第一个符号是方块,后面的内容正常,所以觉得问题还是出在mysql上。
后来查了一下mysql从5.5开始支持utf8mb4
编码,也就是可以兼容emoji。通常的utf8
用三个字节来表示字符,而utf8mb4
则是四个字节,前者是后者的一个子集,后者能表示更多字符。于是把数据库的编码改成了utf8mb4
,尝试往数据库写入emoji表情仍为空,又纠结了一番发觉是php代码设置PDO
的时候出了问题,参考MySQL5.6插入中文乱码的问题一文设置charset
那一句应改为$charset='utf8mb4';
。
再次测试能成功插入,不过navicat里emoji还是显示为问号,不知道是navicat还是windows还是字体问题……