ITPub博客

首页 > 数据库 > MySQL > 关于移动设备 表情符号的数据库存储 与 utf8 与utf8mb4 字符集

关于移动设备 表情符号的数据库存储 与 utf8 与utf8mb4 字符集

原创 MySQL 作者:babyyellow 时间:2015-03-05 10:51:13 0 删除 编辑
我们的一些业务系统最近出现了一种情况,尤其是新版的ios 设备,在发布消息时,使用了表情符号时,

对gbk 字符集的数据库,写入数据库的数据,在回显时,变成 ‘口口’ 无法回显,

对utf8 字符集的数据库,则根本无法写入数据库,客户端程序直接报 java.io.exception xxxxxxxx. 






原因在哪里呢? 


各种移动设备,各种不同的输入法,都会自带一些增强版的'bmp' 表情符号。 

这些表情符号编码为 4个字节的 字符,  utf8 字符集目前只支持1-3 个字节的字符,导致数据无法入库。 

解决方案  有两种: 

1.  遍历输入的文本,把四字节长度的字符,修正为自定义的字符替换掉,有一定的工作量。 

2.  修改数据库字符集, 把数据库字符集从utf8 修改为支持1-4 个字节字符的utf8mb4 

     mysql 从 5.5.3 版本开始支持 utf8mb4 字符集 , 从 mysql 5.5.3 之后版本基本可以无缝升级到 utf8mb4 字符集。 

3.升级方案: 

1)  修改数据库字符集character-set-server=utf8mb4   重启数据库生效。 

2)  修改database  的字符集为 utf8mb4  alter  database  dbname  character  set utf8mb4 

3)    修改表的字符集   为utf8mb4 , alter  table  character set = utf8mb4 


4. 需要注意的一些点。 

 1)  innodb 索引只能支持 767 的字节,对utf8 大约可以为255 字符做索引,  对utf8mb4 就只有 191 个字符了,你的索引可能要重新定义。 

2) 你的char  varchar 的字段定义可能要重新定义或者修改为 text 类型。 

3)  utf8mb4 是utf8 的一个超集, utf8 字符的编码,位置, 存储  在utf8mb4 与utf8 字符集里一样的,不会对有现有数据带来损坏。 

4) 谨慎起见,请详细测试你的应用对该字符集的兼容性问题。 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/133735/viewspace-1448920/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
oracle MySQL Postgresql 专职数据库dba。 系统架构师。 mysql 官方认知dba 。 15年专职dba 经验。 潜意识沟通实证者 心理咨询师。 禅修布道者, 禅修指导员。 禅定实证者。

注册时间:2010-12-02

  • 博文量
    367
  • 访问量
    1908882