当我运行查询#1时:
SELECT * FROM $TABLE INTO OUTFILE $FILE CHARACTER SET utf8 FIELDS ESCAPED BY '\\\\' TERMINATED BY '|';
有一个字段值输出为:
blah\0
我试图在不使用INTO OUTFILE
的情况下获得相同的输出。
使用Perl代码查询#2:
$query = $db->prepare("SELECT * FROM $TABLE");
$query->execute;
open(FILE_OUT, ">$FILE");
但是,上面的同一列输出为
blah
因此\0
字符(ASCII NUL)的输出方式不同。如何修改查询#2以输出blah\0
?
修改可以是MySQL查询或Perl。列的排序规则是utf8_general_ci。我尝试使用CONVERT($column using utf8)
,但仍显示blah
,而且我不确定在输出时如何将其应用于每个表的每一列。
更新
此Perl代码用于转义NUL字符。
$row =~ s/\0/\\0/g;
但是还有很多其他的MySQL特殊字符,有没有办法一次性将它们全部转义而不是逐个处理它们?
答案 0 :(得分:1)
数据库句柄的quote method应该能够引用任何特殊字符:
my $sth = $dbh->prepare("select '\0'");
$sth->execute;
while (my $row = $sth->fetch) {
my ($col) = @$row;
print "[$col] is quoted as ", $dbh->quote($col), "\n";
}
在我的MySQL版本上打印:
[] is quoted as '\0'
如果我通过hexdump -C
通过管道传输
00000000 5b 00 5d 20 69 73 20 71 75 6f 74 65 64 20 61 73 |[.] is quoted as|
00000010 20 27 5c 30 27 0a | '\0'.|
00000016