2009-09-29 258 views
2

我有一些供應商數據的SOH(ASCII字符1)作爲字段分隔符,STX(ASCII字符2)作爲記錄分隔符。是否可以用LOAD DATA INFILE加載這些數據,而無需預先處理文件並用更常見的東西替換這些字符?使用MySQL LOAD DATA INFILE和非打印字符分隔符

+1

woa,這是多麼奇怪的圓滿! :) – markus 2009-09-29 16:42:52

+0

哈.. ..告訴我有關它...有時我討厭供營商:) – danb 2009-09-29 16:52:36

回答

6

我明白了。

LOAD DATA LOCAL INFILE 'myfile.txt' INTO TABLE my_table 
    CHARACTER SET UTF8 
    FIELDS TERMINATED BY X'01' 
    LINES TERMINATED BY X'02' 
    (col1, col2, col3); 
+1

這真是太好了 - 我沒有想到解析器只接受「TERMINATED BY」之後的字面引號字符。作爲參考,關於這個的文檔在http://dev.mysql.com/doc/refman/5.1/en/hexadecimal-values.html – 2009-09-29 19:05:28

1

你可以試試FIELDS TERMINATED BY _ascii 0x02。我不知道它是否適用於LOAD DATA INFILE,但它在SELECT中工作(即SELECT _ascii 0x61產生'a')。

+0

我很興奮了一秒,但它沒有工作.. LOAD DATA想要一個字符串文字...我想我需要預先-process ..謝謝 – danb 2009-09-29 17:05:23

0

您可以嘗試直接在字符串內發送ascii字符串。如果您的連接沒有分配字符集或編碼,那麼mysql可能會簡單地接受它作爲有效的字符串。您必須通過網絡連接或將數據傳輸到mysql客戶端。我不認爲你可以在控制檯上輸入。

1

如果您使用的mysqlimport爲十六進制值的格式字段終止,通過與線終止,由ETC是:

的mysqlimport --local --user =用戶名 - 密碼= secret --ignore-lines = 4 --default-character-set = UTF8 --fields-terminated-by = 0x01 --verbose databasename thefiletoimport

0

FIELDS TERMINATED BY X '01'

適合我