2009-09-29 257 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'

适合我