如何获取select以输出转义的“\0”字符

xkrw2x1b  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(478)

运行查询#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\u general\u ci。我试过用 CONVERT($column using utf8) 但它仍然显示 blah ,并且我不确定在输出时如何将它应用于每个表的每一列。
更新:
这段perl代码用于转义nul字符。

$row =~ s/\0/\\0/g;

但是mysql还有很多其他的特殊字符,有没有一种方法可以一次将它们全部转义,而不是逐个处理它们呢?

yk9xbfzb

yk9xbfzb1#

数据库句柄的quote方法应该能够引用任何特殊字符:

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

相关问题