【问题标题】:Best way to deal with csv , for preparation for mySql处理 csv 的最佳方法,为 mySql 做准备
【发布时间】:2010-11-23 03:31:04
【问题描述】:

我们有一个 CSV 文件,经过仔细检查和剥离,以我们想要的格式显示数据。

因此,这个 csv 文件的大小不到 500kb。我已转换为 sql(另存为 txt)希望没问题。

原始的csv数据条目是3个字段,如下:

'斯坦利','7331','TAS'

'戈曼斯顿','7466','TAS'

转换后是这样的:

插入郊区 ('Locality','Pcode','State') 值 ('\'STANLEY\'','\'7331\'','\'TAS\'');

插入郊区 ('Locality','Pcode','State') 值 ('\'GORMANSTON\'','\'7466\'','\'TAS\'');

好吧,我想知道,我不是 db officianado。我是否正确转换了它? 我是否应该考虑使此代码更清洁以导入数据库。

这个文件的 sql 超过 1.6 mb,有超过 16,000 个条目,所以要确保我做的事情正确。

干杯

【问题讨论】:

  • 您可能不想在数据库中的值周围插入单引号。
  • 所以...没有人告诉你LOAD DATA INFILE,所以你可以通过CSV加载数据?
  • +1 OMG Ponies 直接从我嘴里说出这些话并启动,没有一个答案暗示它 - egads。

标签: mysql database csv format


【解决方案1】:

正如亚当的评论所说,你很可能不想插入引号,你正在用 \'STANLEY\' 等做。

此外,在“字段”端(位置等),请确保它们是反引号(非移位波浪号),而数据端 (STANLEY) 是单引号。

改为:

INSERT INTO suburbs (`Locality`,`Pcode`,'State`) VALUES ('STANLEY','7331','TAS');

除此之外,我看不出有什么问题。

【讨论】:

  • 所以:我需要在每一行上都插入 INSERT INTO 郊区吗:或者就像我想的那样,插入 INTO 郊区值(Locality、Pcode、State)值(blah、blahblah、deeblah);
  • 好吧,您可以将每一行放在自己的行上,就像我的示例所示...或者如果您的 csv 与表格完全匹配,您可以使用 LOAD DATA INFILE 命令,或者您 CAN 执行多个插入,例如“INSERT INTO 郊区 (a,b,c) VALUES('1','2','3'),('4','5','6 '),('7','8','9)" 但是,有了尽可能多的数据,您将无法在 1 INSERT 行中执行此操作,您仍然需要构建几行,但是您每个插入行最多可以插入 100 次......我认为这与行长有关......你最好每行只做 1 行
  • 谢谢,是的,我打算每行一个,我担心的是缓冲区,因为我确信我读到的最多我们一次可以传输 130kb。所以不确定最好的导入方式,通常我只是进入phpmyadmin,创建一个数据库,然后导入..担心我们可以物理导入多大的虫子,我是否只是将文件切成1000行一次,做 16 次进口......如果这有意义的话
【解决方案2】:

看起来不错,除了转义引号。我通常将这种技术与 excel 文件一起使用。我有我的列,然后我创建一个公式来生成适当的插入语句。或者,您可以使用 SSIS 之类的工具将数据导入数据库。

【讨论】:

  • 谢谢,我只是想通过 phpmyadmin 在 mysql 中添加大量内容
【解决方案3】:

您的 SQL 看起来不错,但额外的转义单引号不会出现在您的记录中吗?我不确定你的记录中是否需要“STANLEY”或只是 STANLEY,所以我将由你决定。

你已经完成了一半的工作。你有一个插入策略,你也有一个回滚策略吗?对您来说,这似乎是一次大数据迁移,如果我可以谦虚地建议您尝试在垃圾表中仅插入几行而您不介意先删除的话。如果必须撤消更改并且没有任何内容或准备好撤消任何错误,这总是很痛苦。

【讨论】:

  • 是的,不知道他们来自哪里,猜测是从我们的 csv 迁移转换,期望 ' 确实是它不是数据的一部分。
猜你喜欢
  • 2018-03-23
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多