想节约数据库空间,就把大字段的数据用gzcompress压缩了一下,
入库前使用mysql_real_escape_string和get_magic_quotes_gpc处理一下,
但是再读取的时候发现无法解压缩了,请问有什么办法能够解决吗?或者有类似方法能够压缩入库然后读取再解压的?谢谢
入库前使用mysql_real_escape_string和get_magic_quotes_gpc处理一下,
但是再读取的时候发现无法解压缩了,请问有什么办法能够解决吗?或者有类似方法能够压缩入库然后读取再解压的?谢谢
$ystmp = gzcompress($content);
$ysdata=@ocean_check_input(iconv("GBK", "UTF-8//IGNORE", trim($content)));
$sql_data="INSERT INTO mdata (bid,sid,tid,mdata,udatetime,ugt) VALUES ('".$bid."', '".$sid."', '".$tid."', '".$ysdata."','".$cur."','".time()."' )";
mysql_query("SET NAMES UTF8");
$result_data = mysql_query($sql_data,$con);
if (!$result_data){
die('Error: ' . mysql_error());
}其中的ocean_check_input为
function ocean_check_input($value){
// 去除斜杠
if (get_magic_quotes_gpc()){
$value = stripslashes($value);
}
// 如果不是数字则加引号
if (!is_numeric($value)){
$value = mysql_real_escape_string($value);
}
return $value;
}
$str = file_get_contents('http://www.sina.com.cn');
$ystmp = gzcompress($content);
被压缩的不知是什么内容2、从
$ysdata=@ocean_check_input(iconv("GBK", "UTF-8//IGNORE", trim($content)));
看,同样不知道被处理的是什么内容3、如果是
$str = file_get_contents('http://www.sina.com.cn');
$content = gzcompress($str);
$ysdata=@ocean_check_input(iconv("GBK", "UTF-8//IGNORE", trim($content)));
那么是处理次序错了,转码必须在压缩前完成
正确的次序是 转码-》压缩-》转义4、你的 ocean_check_input 函数有问题
你处理的数据是程序生成的,与 magic_quotes_gpc 开关状态无关
Error: Incorrect string value: '\x9C\xD5}mS\x1B...' for column 'mdata' at row 1方向对了我再慢慢找原因,哈哈,非常感谢!
$yszm = iconv("GBK", "UTF-8//IGNORE", trim($content));
//$ysdata = gzcompress($yszm,9);
$ysdata= ocean_check_input($yszm);
第二种情况,压缩,转码->压缩->转义后就出错
$yszm = iconv("GBK", "UTF-8//IGNORE", trim($content));
$ystmp = gzcompress($yszm,9);
$ysdata= ocean_check_input($ystmp);
Error: Incorrect string value: '\x9C\xD5}mS\x1B...' for column 'mdata' at row 1
或
Error: Incorrect string value: '\xDA\xD5}\xFBS\x1B...' for column 'mdata'检查字段字符集utf8,整理utf8_unicode_ci和utf8_general_ci都试了不行您遇到过类似的情况吗?郁闷,查了些资料都不对
二进制字符串包含的是字节字符串,非二进制字符串包含的是字符字符串;后者可以定义字符集,前者不可以;而且排序和比较前者基于列值字节的数值值,后者则根据字母顺序进行排序或比较; BINARY类似与CHAR类型,但是保存二进制字符串而不是非二进制字符串;VARBINARY类似与VARCHAR类型,但是保存二进制字符串而不是非二进制字符串;
同样类似的BLOB对应TEXT类型(相应的有TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB和TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT)