mysql截断问题

  • MYSQL中UTF-8编码最多只能是3个字节(5.5.3版本后,有 utf8mb4类型可支持4个字节的utf8);
  • utf8是一种1-4个字节的可变字符编码(英文1个字符,汉字3个字符);
  • 某些特殊字符(emoji表情符号等)是4字节的utf8编码;
  • MYSQL在遇到超过最大字节范围的字符时,会忽略其后面的字符串,从而导致内容丢失。
  • 升级MYSQL到5.5.3版本以上,并将字段的编码设置为utf8mb4类型;
  • 通过程序,将字符串中4字节的utf8字符替换或者删除即可。
  •     function removeByte4($str){
        return preg_replace('/[\xF0-\xF7].../s','', $str);
        }
    

     

  • windows xp: xp系统不支持4字节utf8字符, 浏览器用占位符显示;
  • windows 7: 支持4字节utf8字符;
  • mac os x: 支持4字节utf8字符;
  • iPhone/iPad: 支持4字节utf8字符;

此问题可参考mysql utf8mb4与emoji表情

  • 将特殊的4字节字符用相应的图片表情代替;
  • 替换的时候,注意不要堵塞用户的处理流程,当文本内容较长时,这是一个很耗性能的处理,建议先忽略4字节字符,然后将内容存到文件或者其他地方,后续使用脚本对这些内容进行替换处理等操作。;
  • 新浪微博等有做相应处理;
  • 特殊符合以及对应表情可参考[网站](http://www.charbase.com/);

出自:vien Daves Blog

 

posted on 2014-12-24 16:17  朱永志  阅读(402)  评论(0)    收藏  举报

导航