如何使用mysqlimport解析使用特殊字符作为分隔符的文档?
我试过:如何使用mysqlimport解析使用特殊字符作为分隔符的文档?,mysql,ascii,special-characters,mysqlimport,Mysql,Ascii,Special Characters,Mysqlimport,我试过: mysqlimport --local --fields-optionally-enclosed-by='\x254' --fields-terminated-by='\x14' testdb messages.txt 以及: mysqlimport --local --fields-optionally-enclosed-by='\xFE' --fields-terminated-by='\cT' testdb
mysqlimport --local --fields-optionally-enclosed-by='\x254'
--fields-terminated-by='\x14' testdb messages.txt
以及:
mysqlimport --local --fields-optionally-enclosed-by='\xFE'
--fields-terminated-by='\cT' testdb messages.txt
我得到:
mysqlimport:错误:1083,字段分隔符参数不是预期的参数;使用表:消息时,请检查手册
我尝试了双引号,没有引号以及单引号,如上面所述。有人知道正确的语法应该是什么吗?根据文档(),只有一些转义序列可用于mysqlimport,它们是:
Character Escape Sequence
\0 An ASCII NUL (0x00) character
\b A backspace character
\n A newline (linefeed) character
\r A carriage return character
\t A tab character.
\Z ASCII 26 (Control+Z)
\N NULL
因此,如果您有不寻常的行尾(如“\x02\n”),除了预先格式化文件之外,别无选择。幸运的是,使用一点sed非常简单。例如,对于以“\x02\n”结尾的行和以“\x01”结尾的字段,可以使用以下bash脚本:
#!/bin/sh
FILE="$1.tmp"
# Copying
cp $1 $FILE
# Removing comments from file
sed -i '/^#/d' $FILE
# Replacing field separator
sed -i 's/\x01/\x00%/g' $FILE
# Replacing lineends
sed -i ':a;N;$!ba;s/\x02\n/\x00\n/g' $FILE
然后拍摄以下mysqlimport
mysqlimport --fields-terminated-by="\0%" --lines-terminated-by="\0\n" [...] $FILE
将很好地工作。我开始相信问题在于mysql不喜欢不可打印的ascii字符,至少不是出于这个目的。