发布于 1970-01-01 08:00
  • 3 个回答
    • 这个不是字符集的问题,而是编码的问题
      gzdeflate之后的数据是二进制串,不属于任何字符集,字符集是针对可打印(printable)文本串

      你这样utf8_encode其实是把gzdeflate之后的二进制串当做iso_8859_1编码的字符串转换为utf-8编码,这样一步操作只会让压缩后的二进制串长度增加(所有ASCII>127的字符都会被扩充到2个字节以上)

      如果出于压缩考虑,最好直接使用BLOB等二进制类型存储,存取的时候也不需要进行编码转换

      2022-12-01 20:02 回答
    • 问题解决了,确实是字符集的问题,把gzdeflate压缩后的数据进行utf8_encode一下就可以了

      $a = array('aa'=>'bb');
      $s = json_encode($a);
      $s = gzdeflate($s);
      $s = utf8_encode($s);//答案就在这里,取出来的时候相应的做一下utf_decode()
      $sql = "insert into tbl_name(id,content) values(1,'%s')";
      $sql = sprintf($sql,$s);
      mysql_connect('host','user','pwd');
      mysql_query('set names utf8');
      mysql_query('use db_name');
      mysql_query($sql);
      mysql_close();

      参考了这里的信息http://stackoverflow.com/questions/9413402/php-mysql-special-character-inserts-being-truncated

      对比了一下gzdeflate数据前面的大小,原来28万个字节的内容压缩之后只有2000多,压缩比率相当高

      2022-12-01 20:02 回答
    • 也可以吧gzdeflate后的数据再base64下来增强兼容性,或者数据库中直接存储deflate后的二进制流

      2022-12-01 20:02 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有