1

私はもう試した:

 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、フィールド区切り引数が予期されたものではありません。table: メッセージを使用する場合は、マニュアルを確認してください。

上記のように、二重引用符、引用符なし、および単一引用符を試しました。正しい構文を知っている人はいますか?

4

1 に答える 1

2

ドキュメント ( http://dev.mysql.com/doc/refman/5.0/en/load-data.html )によると、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

うまく機能します。

于 2012-01-21T13:30:12.280 に答える