有个问题,请高手解决
发布于 12 年前 作者 peiweippww 5869 次预览 最后一次回复是 12 年前 来自
数据库:mysql node模块:mysql
我想压缩一段字符串,使用到了node的zlib,代码如下: var str = ‘[1,2,3,4,[1,2,3,4],6,7,8]’; zlib.gzip( str, function( err, buffer ){ db.update( table_name, { data : buffer.toString( ‘binary’ ) }, ‘id=10001’ fucntion( err, res ){} ); });
数据库的data字段数据类型我设置的为blob
然后我获取刚刚设置的数据: db.select( table_name, ‘id=10001’, function( err, res ) { var buf = res[0].data; //打印出从数据库取出的data,它的数据类型是buffer //我担心mysql库得到的buffer并不是我压缩时候的编码类型,所以我做了如下转化 var new_buf = new Buffer( buf.toString( ‘binary’ ), ‘binary’ ); //然后解压 zlib.unzip( new_buf, function( err, res ) { //这里就报错了 }) });
我看了下主要原因是,存进mysql的数据和取出来的数据不一样,不是说node_mysql已经支持binary的存储了吗,为什么还不一样,是不是底层在buffer数据了加了些东西,怎么解决这个问题,有人遇到过没
5 回复
这是我在mysql模块上面的问题,里面问题错误描述更准确,https://github.com/felixge/node-mysql/issues/555#issuecomment-21480376
lz 的环境与这个人是否一致? 这个人说在这样的环境下完全没问题 mysql@2.0.0-alpha7 (and up) and it does the round-trip no problem on MySQL 5.1.
我正在找问题,呵
issue上给出的buff存储前后的数据
这个结果,不是node-mysq掺入额外的数据,而是编码转换导致的,下面代码可重现前一个buffer是怎么转变为后一个buffer的。
请确认自身代码没有在某个地方做了类似的编码转换
另外如果怀疑node-mysql出错,最好直接利用mysql的专门客户端软件导出blob字段的数据,来做前后对比。这比用自己未经测试的代码来作对比,有说服力的多。因为你没给出testcase,谁也不能确定错误究竟是来自node-mysql还是你自身的代码。
谢谢回答,终于找到问题了,我在node-mysql上还有一层封装,这里面将编码给转化了