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

php中文网
发布: 2016-06-06 20:40:01
原创
1597人浏览过

$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Ü0\0')
结果数据库里面是下面的内容:
php json_encode 之后gzdeflate然后插入mysql数据库,插入失败
感觉像是字符集不支持,已经检查了database和table都是utf8?

然后,还有就是我在取数据的时候要注意哪些问题?

回复内容:

$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Ü0\0')
结果数据库里面是下面的内容:
php json_encode 之后gzdeflate然后插入mysql数据库,插入失败
感觉像是字符集不支持,已经检查了database和table都是utf8?

然后,还有就是我在取数据的时候要注意哪些问题?

这个不是字符集的问题,而是编码的问题
gzdeflate之后的数据是二进制串,不属于任何字符集,字符集是针对可打印(printable)文本串

立即学习PHP免费学习笔记(深入)”;

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

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

问题解决了,确实是字符集的问题,把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多,压缩比率相当高

也可以吧gzdeflate后的数据再base64下来增强兼容性,或者数据库中直接存储deflate后的二进制流

相关标签:
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号