10

1 つのフィールドを blob として持つ大きなデータのセットを mysql サーバー (5.5) にインポートする必要があります。SELECT INTO OUTFILE と LOAD DATA INFILE のサンプルに従うと、[ほぼ] 正常に動作します。ただし、問題があります。BLOB のファイルで生成されたデータには、実際にはバイナリ表現があります。生成されたファイルは次のようになります (3 列目は BLOB ファイルを表します)。

1,1,"4Vÿ"
2,1,"ª»Ì"
3,1,"Ýîÿ"
4,1,"\"3"

この場合、インポートは次の sql ステートメントで正常に機能します。

LOAD DATA INFILE 'C:/temp/mysql/mysqldump.1.txt'
INTO TABLE `test_table`
  ',' で終了するフィールド オプションで '"' で囲む
  「\r\n」で終了する行
;

私の問題は、テキストがこのように偶然に生成されることです。引用符や改行などが発生した場合は、手動でエスケープする必要があり (つまり、バックスラッシュ文字に置き換えます)、この手順をスキップしたいと思います。

そこで、私の質問は次のとおりです。次の形式のテキスト ファイルをインポートする方法はありますか (BLOB は hex として保存されます)。

1、1、0x123456FF
2、1、0xaabbcc
3、1、0xddeeff
4、1、0x112233

単一のmysqlステートメントで?

更新:言及するのを忘れました-LOAD DATA INFILEステートメントを使用して、目的の形式のテキストファイルを直接インポートしようとしましたが、結果は実際にはテーブルのBLOBファイルにテキスト「0x123456FF」を格納していました。

4

2 に答える 2

28

LOAD DATA INFILEのSET部分を使用でき、0xエスケープのものは必要ありません。

1, 1, 123456FF
2, 1, aabbcc
3, 1, ddeeff

次に、列を変数に割り当て、列をその変数のUNHEXバージョンに設定します。

LOAD DATA INFILE 'file' INTO TABLE `table` (column1, column2, @var1)
SET column3 = UNHEX(@var1)
于 2013-02-21T12:52:02.713 に答える
0

代替手段が見つかりませんでした。唯一の方法のようですbinary(また、これに関してmysqlにはすでにバグ/機能要求があります)。

考慮すべき 2 つの点:

  • 入力ファイルを生成するときのテキスト ファイルのエンコーディング。
  • 文字エスケープ (NEW-LINE、TAB、QUOTE など);
于 2012-08-23T08:41:35.573 に答える