用Unicode迎接未来
项目中使用了emoji,然后,问题产生了,后端MySQL数据库无法存储emoji字符,悲了个剧。
emoji是Unicode字符集的子集,Unicode的使用应该非常普遍了,怎么会遇到这种问题呢?这还要从头说起。
Unicode是为了解决全球字符的统一编码,用这一个字符集就能够容纳得下全球各语种的字符和特殊符号。与之相应的是GB-2312或GBK这种国标编码,用于对中文字符进行编码的。如今用GB-2312编码越来越少了。
可是Unicode仅仅是二进制编码,字符的转换和传输还是须要再定义交换码,这就是通常所说的UTF-8、UTF-16、UTF-32……用于对二进制格式的Unicode字符进行字符表示的编码,最经常使用的是UTF-8。
再来说UTF-8,它是变长的编码,採用1-6个字节来编码一个Unicode字符,比方Ascii码就用1个字节,汉字通经常使用3个字节,emoji是4个字节。
问题就出在这了。早期,MySQL支持3个字节的UTF8编码存储,所以一直相安无事。可是随着Unicode的发展,emoji大量的使用,非常多字符须要用4个字节的UTF8编码才干表示了,于是出现了这些字符进入MySQL数据库中被截断或者是乱码的现象。
处理的办法是把MySQL升级到5.5.4以上,升级字符集为utf8mb4。
就在今天,Unicode发布了7.0新标准,至少新增了2834个字符,包含新的emoji表情符,以后要盯着Unicode了,用全球化眼光处理问题,未来会少一些麻烦。
——欢迎转载,请注明原文出处 http://blog.csdn.net/caowenbin ——
——欢迎关注微信号“曹文斌的软件思考”,共同探讨软件人生——