第 1 行的 CSV 输入中的列数无效错误
Posted
技术标签:
【中文标题】第 1 行的 CSV 输入中的列数无效错误【英文标题】:Invalid column count in CSV input on line 1 Error 【发布时间】:2013-04-21 07:22:02 【问题描述】:我正在尝试使用 phpMyAdmin 将“.csv”文件放到 SQL 数据库中。但是,每当我导入它时,我都会收到错误消息:第 1 行的 CSV 输入中的列数无效。 我整天都在玩不同的选择来尝试让它工作,但无济于事。我的 .csv 文件中正好有 47 列。我在我的 SQL 表中创建了 47 列。然而,这些名称与文件中的名称并不完全相同。每当我导入时,它总是给我那个错误。 任何帮助将不胜感激! ~地毯嘶嘶声 我认为可能导致问题的一件事是第一列在我的 excel 文档中没有命名。这会导致问题吗?
编辑 12:30AM:phpMyAdmin 已经是可用的最新版本,通过(apt-get install phpmyadmin)(phpmyadmin 已经是最新版本)
Here 是 .csv 文件,如果有帮助的话。
【问题讨论】:
错误完全引导你。它在第 1 行说你的列比你在 mysql 表中创建的多。 你这样做的代码是什么,可能也是,尝试给第一列命名,然后导入 @Amir 感谢您指出这一点。在电子表格(我还没有创建)中,列号从 47 跳到 89,并以蓝色突出显示,对这意味着什么有什么想法吗?这是它的屏幕:i.imgur.com/IJmTZGO.png 在您的 pastebin csv 中的逗号上使用substr_count()
时,我显示 87 个逗号,而不是 47 列中的 46 个。 - phpfiddle.org/main/code/7ui-wc9
查看您的表格屏幕图像 (i.imgur.com/IJmTZGO.png),如果它从 47 跳到 89,则最有可能的值在 48-88,但列已折叠。尝试再次将它们全部展开,您将在每一行中看到额外的列。
【参考方案1】:
如果您的 DB 表已经存在并且您不想在 CSV 文件中包含所有表的列,那么当您运行 PHP Admin Import 时,您需要填写 Format-Specific Options 中的 Column Names 字段CSV - 显示在以下屏幕截图的底部。
总结:
选择一个 CSV 文件 将格式设置为 CSV 在“列名”字段中填写 CSV 中的列名 如果您的 CSV 文件的列名列在第 1 行,请将“跳过此数量的查询(对于 SQL)或行数(对于其他格式),从第一个开始”设置为 1【讨论】:
应该标记为正确答案。您需要提及列名。 如果您在.CSV
文件中有不同数量的列,对我来说最好的解决方案。
谢谢!我所有的搜索,这是我找到的唯一正确答案。这应该被标记为正确答案【参考方案2】:
已修复!我基本上只是选择了“导入”,甚至没有自己制作表格。 phpMyAdmin 从原始文档中为我创建了具有所有正确列名的表。
【讨论】:
另外,我遇到了同样的问题。我和你一样修好了,但是你遗漏了一个重要的细节。当您单击“导入”时,请确保选择了数据库中的表未。 应该改为选择数据库名称。 @Crt:你的评论应该是一个答案,如果不是被接受的话! 如果表名相同,则可以单击该表名,转到操作,复制表,然后添加一个数字使其不同,然后删除原始表。【参考方案3】:我在使用 phpMyAdmin 导入 .csv 文件时遇到了同样的错误。
我的问题的解决方案是我的计算机将 .csv 文件保存为 ; (分号)代替 ,(逗号)作为分隔符。
在“格式特定选项”中,您可以选择“列分隔:”并选择 ;而不是 ,(逗号)。
要查看您的计算机存储文件的位置,请在文本编辑器中打开 .csv 文件。
【讨论】:
很好的建议!在文本编辑器中打开我的 .csv 文件显示我的文件有 12 个额外的列,这会触发 Invalid column count 错误。 谢谢!我实际上结合了所有答案:跳过查询数,添加列名并将“列分隔符”值更改为 ; (分号)。效果很好!【参考方案4】:您需要跳过第一行(其中定义了列名),并且您需要检查哪个“字符”分隔单元格(通常是 ,
,但在我的情况下是 ;
)
下面是我导入的图片:
【讨论】:
【参考方案5】:这实际上很容易修复,我最初在大约 10 年前在这里写了关于修复的文章 https://ao.ms/phpmyadmin-invalid-field-count-in-csv-input-on-line-1/
您想要做的是将“字段终止于”从“;”到“,”,然后确保选中“使用 LOCAL 关键字”。
【讨论】:
这是一个被严重低估的答案。解决了我的问题。谢谢!! :-) “#1148 - 此 MySQL 版本不允许使用的命令”,它说(我的 MySQL 版本似乎是“5.7.29-32-log”)。【参考方案6】:当遇到任何类型的输入文件错误时,编码问题很常见。
一个简单的解决方案可能是打开一个新文件,将 CSV 文本复制粘贴到其中,然后将其另存为新文件。
【讨论】:
【参考方案7】:我刚刚遇到这个问题,并意识到有空列被视为具有值的列,我通过在文本编辑器中打开 CSV 看到了这一点。为了解决这个问题,我打开了我的电子表格并删除了最后一列之后的列,它们看起来完全是空的,但实际上并非如此。在我这样做之后,导入工作完美。
【讨论】:
【参考方案8】:遇到同样的问题并做了两处更改:(a) 没有覆盖现有数据(如果这是您的意图,这并不理想,但您可以事先运行删除查询),以及 (b) 计算列并发现csv 有一个空列,因此即使所有“似乎”看起来都是正确的,回到原来的工作总是值得的。
【讨论】:
【参考方案9】:如果表已经创建,并且您懒得在字段名称输入中指定列,那么您所要做的就是选择文件内容右侧的空列并将其删除。
【讨论】:
【参考方案10】:您的解决方案似乎假设您希望创建一个全新的表。
但是,如果您想将内容添加到已经存在的表中,请查看表的结构并注意列数(id 列,如果您还有一个也很重要->即使它可能是自动递增的/独一无二)
所以如果你的桌子看起来像这样 id 姓名 年龄 性别
确保您的 Excel 表格看起来像 A1 id B1 姓名 C1 年龄 D1 性别
现在它们都有 4 列。
同样在部分导入下,在跳过查询数旁边....增加数字以跳过相应的行。选择 1 将自动跳过第一行。对于那些可能在 excel 文件中有标题的人
【讨论】:
【参考方案11】:我在使用 phpmyAdmin 时遇到了类似的问题。要导入的文件中的列数与目标数据库表中的列相匹配。我尝试导入 .csv 和 .ods 格式的文件均无济于事,出现了各种错误,包括一个认为列数错误的错误。
.csv 和 .ods 文件都是使用 LibreOffice 5.204 创建的。基于过去几年在导入问题方面的一些经验,我决定使用 gnumeric 电子表格重新制作文件,按照“严格”格式标准导出 .ods。瞧!没有更多的进口问题。虽然我没有时间进一步调查这个问题,但我怀疑 LibreOffice 文件输出的内部结构发生了一些变化。
【讨论】:
【参考方案12】:我的数据库的最后一列(电子表格中的 F 列)未使用,因此为空。当我导入 excel CSV 文件时,出现“列数”错误。
这是因为 excel 只保存我使用的列。 A-E
在F的第一行加0解决了问题,上传成功后我删除了。
希望这有助于并节省其他人的时间和脱发:)
【讨论】:
【参考方案13】:在 Microsoft Excel 中修复此错误的最愚蠢的事情(假设您实际上所有其他内容都正确):
在保存 CSV 之前,选择您的数据并单击 Excel 中的“全部边框”(在您的数据周围放置可视边框)。听起来毫无意义?我完全同意!但是,它将修复此错误。我每周至少使用此技巧 3 次。
【讨论】:
【参考方案14】:我在 phpMyAdmin 中也遇到过这个问题。 使用 LOAD_DATA 代替 LOAD 解决了这个问题。
这些列是:
id,date,description,amount,payment_method
id
作为 AUTO_INCREMENT 主键。
记录是这样的:
,2019-01-01,Car insurance for year 2019,321.00,bank
表格编码为utf8_general_ci
,文件编码为utf-8
。
手动设置列 id
的值时,LOAD 也失败。
【讨论】:
以上是关于第 1 行的 CSV 输入中的列数无效错误的主要内容,如果未能解决你的问题,请参考以下文章
csv导入错误的Mysql排序规则/类型第1362行的CSV输入中的列计数无效