换了新的工作环境,刚到公司接触项目后,就要解决一个bug,ios端设置姓名,要求可以存emjon表情。
什么是emoji表情?
emoji (词语) 编辑
绘文字(日语:絵文字/えもじ emoji)是日本在无线通信中所使用的视觉情感符号,绘指图画,文字指的则是字符,可用来代表多种表情,如笑脸表示笑、蛋糕表示食物等。
在NTTDoCoMo的i-mode系统电话系统中,绘文字的尺寸是12x12 像素,在传送时,一个图形有2个字节。Unicode编码为E63E到E757,而在Shift-JIS编码则是从F89F到F9FC。基本的绘文字共有176个符号,在C-HTML4.0的编程语言中,则另增添了76个情感符号。
最早由栗田穰崇(Shigetaka Kurita)创作,并在日本网络及手机用户中流行。
自苹果公司发布的iOS 5输入法中加入了emoji后,这种表情符号开始席卷全球,目前emoji已被大多数现代计算机系统所兼容的Unicode编码采纳,普遍应用于各种手机短信和社交网络中。
—摘自《百度百科》
一、关于数据库的操作
那就存呗,直接将前台的数据往数据库存,报错:
Incorrect string value: ‘\xF0\x9F\x98\x82\xF0\x9F…’ for column ‘question’ at row 1
上网查资料后,说是要设置数据库编码格式,表编码格式和字段编码格式,一般设置为“utf-8”,这对于汉字来说足够了,在mysql中utf8占3个字节,但是对于移动端的特殊表情符号来说,三个字节是不够的,需要四个字节,即使用utf8mb4的编码格式,向下兼容utf8。这个时候我们使用utf8就会出现‘\xF0\x9F\x8F\x80’的问题。
解决方案:
- Mysql 版本的限制,Mysql 5.5.3之前的版本,支持的utf8为3字节的,Mysql 5.5.3之后的版本支持utf8mb4。本地数据库进行升级操作,详细可自行百度。
- 修改mysql的配置文件,windows下的为my.ini(linux下的为my.cnf),修改的内容都一样。
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
3.将数据库中对应的字段,改为utf8mb4_general_ci
ALTER DATABASE database_test CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE table_name CHANGE cloumn_name cloumn_name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
4.修改项目中的连接数据库的url,将characterEncoding=utf-8去掉,此步骤一定要进行。