如何修改文本文件以便可以将其加载到mysql数据库中?

时间:2013-04-04 19:41:51

标签: mysql database text

我的表中有100多列,有些可以为null。我想从txt文件输入。因此,某些行可能没有全部100个奇数条目。

例如,我的文本文件中的一行可能有大约50个由“制表符”分隔的条目,但是如何指定这些50个条目必须从100多个列中生成哪些列?

我读过     LOAD DATA INFILE但我仍然对我的问题感到困惑。任何帮助表示赞赏。


假设文本文件是:
托比,洛杉矶,卡尔,246

我希望得到的表格是:
Toby NULL LA
Carl 246 NULL
我该怎么做?

2 个答案:

答案 0 :(得分:0)

使用此说明:

LOAD DATA INFILE '/tmp/test.txt' INTO TABLE test
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'

这是你的txt的路线:

'/tmp/test.txt' 

将txt转储到名为test。

的表上

你的txt应该有这样的结构:

Toby, 245, LA
Carl, 246, CA

结果如:

Toby NULL LA 
Carl 246 NULL 

txt应该是:

Toby, NULL, LA 
Carl, 246 , NULL 

那是因为FIELD SCAPED BY未指定。

来自Mysql文档:

NULL值的处理因使用的FIELDS和LINES选项而异:

对于默认的FIELDS和LINES值,NULL被写为输出的字段值\ N,输入的字段值\ N被读为NULL(假设ESCAPED BY字符是“\”)。

如果FIELDS ENCLOSED BY不为空,则包含字面值NULL作为其值的字段将被读取为NULL值。这与FIELDS ENCLOSED BY字符中包含的单词NULL不同,后者被读作字符串'NULL'。

如果FIELDS ESCAPED BY为空,则将NULL写为单词NULL。 3个字段用','白色结束线分隔\ n ...你的表测试应该具有相同的结构

答案 1 :(得分:0)

需要对文本文件进行组织,使其具有一致的列集。如果在一行中有50个制表符分隔的值,然后在下一行中有100个制表符分隔的值,那么您将永远无法将数据干净地加载到MySQL中。

仍然需要在文本文件中考虑缺少的值,使用空字符串,NULL等来表示缺失值。

如果您的表中有一些包含NULL值的现有数据,那么您可以将该数据的子集转储到磁盘,以获得在制表符分隔文件中格式化缺失值的正确方法的示例:

select *
into outfile '/tmp/test.tsv'
FIELDS TERMINATED BY '\t' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
from your_table
limit 1000