我使用两个数据库,一个是典型的WAMP服务器,另一个是本地MySQL数据库。我注意到每个数据库存储blob的方式有一些不同,当我导出一行并比较每个blob时,我注意到了这一点。
例如,当本地MySQL导出blob时,任何'NUL‘ASCII字符都以'\’作为前缀,但是从WAMP MySQL导出的情况并非如此。因此,为了匹配它们,我必须做( PHP中的db导出)
$val = str_replace(chr('NUL'), '\0', $val);当我努力寻找出口之间更多的差异时,我也不得不这样做。
$val = str_replace(chr(0x9), chr(0x5c).chr(0x9), $val);
$val = str_replace(chr(0xa), chr(0x5c).chr(0xa), $val); 对于一个非常简单和微小的图像来说,这是很好的。但我可以想象,我还会遇到更多的分歧,我无法以理智和及时的方式解释所有这些差异。我想知道这意味着什么。这两个表都是InnoDB引擎和utf8_general_ci排序规则。还有什么可能是配置错误的?
发布于 2014-12-30 18:52:36
我假设您有很好的理由不使用mysqldump从数据库中转储数据,因为这将是最好的方法。
如果您想使用PHP中的查询将blob转储出去,那么您有几个选项。您可以使用SELECT ... INTO DUMPFILE fname或SELECT ... INTO OUTFILE fname,并提供文件名。MySQL文档建议使用SELECT INTO DUMPFILE专门编写要归档的blob字段。还有一个可以使用的FIELDS ESCAPED BY子句。有关更多信息,请参见MySQL文档http://dev.mysql.com/doc/refman/5.1/en/select-into.html。
如果SELECT ... INTO OUTFILE技术不适用于您,您可以尝试从数据库中获取blob数据,并在将其写入转储文件之前使用mysqli_real_escape_string转义。这应该足够地转义数据,以便重新插入到数据库中。请记住,编码需要在两个表上匹配。
https://stackoverflow.com/questions/27693252
复制相似问题