开发者社区> 问答> 正文

php json_encode 之后gzdeflate然后插入mysql数据库失败

$a = array('aa'=>'bb');
$s = json_encode($a);
$s = gzdeflate($s);//前面提问题的时候居然把这一句漏掉了,大大的失误(2014/12/22 18:20:00补充)
$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();

上面的代码执行之后数据库里面有新增的记录,但是content字段的值是空的,请大侠指点一下,我的问题在哪里?把sql打印出来了:insert into tbl_name(id,content) values(1,'KLÜ00');感觉像是字符集不支持

展开
收起
蛮大人123 2016-02-07 14:11:24 3142 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    这个不是字符集的问题,而是编码的问题.
    gzdeflate之后的数据是二进制串,不属于任何字符集,字符集是针对可打印(printable)文本串的你这样utf8_encode其实是把gzdeflate之后的二进制串当做iso_8859_1编码的字符串转换为utf-8编码,这样一步操作只会让压缩后的二进制串长度增加(所有ASCII>127的字符都会被扩充到2个字节以上)如果出于压缩考虑,最好直接使用BLOB等二进制类型存储,存取的时候也不需要进行编码转换

    2019-07-17 18:39:03
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-直面PHP微服务架构挑战-高驰涛 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载

相关镜像