在做移动应用时,会遇到ios或者android用户会在文本的区域输入emoji表情(如:??),如果不做一定处理,就会导致插入数据库异常。如下:
Incorrect string value: '\xF0\x9F\x99\x82" ...' for column 'Source'
这是因为emoji表情符号为4个字节的字符,而 utf8 字符集只支持1-3个字节的字符,导致无法写入数据库。
解决方案:
1.修改数据库的字符集为utf8mb4。(注意:mysql版本需要5.5.3以上)具体是需要修改整个mysql库、表或者具体字段字符集自己决定。当然,修改完数据库字符集后还没有大功告成。需要看下程序里连接数据库的时候有没有指定字符集为utf8mb4。php中PDO连接方式如下:
$db = new pdo('mysql:host=127.0.0.1;port=3306;dbname=mysql;charset=utf8mb4','user','password');
2.如果不想修改数据库字符集或者版本比较低不支持,那就只能存的时候转义一下了。可以转为base64格式或者其他支持的转义方式。