导入 CSV 文件时的 MySQL 问题 - 不显示错误,但不导入
Posted
技术标签:
【中文标题】导入 CSV 文件时的 MySQL 问题 - 不显示错误,但不导入【英文标题】:MySQL problem on importing CSV file - doesnt show errors, but does not import 【发布时间】:2020-09-15 16:16:30 【问题描述】:我在将 CSV 文件导入数据库时遇到问题... 它只是不导入。 没有显示错误,但是当我输入“select * from vendas;”时并运行脚本,它似乎什么也没有。 谁能帮帮我?
CREATE DATABASE vendas
CHARACTER SET utf8mb4;
USE vendas;
CREATE TABLE venda (
regiao CHAR(2) NOT NULL,
estado CHAR(2) NOT NULL,
municipio VARCHAR(30) NOT NULL,
revenda VARCHAR(50) NOT NULL,
cnpj varchar(30) NOT NULL,
produto VARCHAR(30) NOT NULL,
DataColeta VARCHAR(30) NULL,
ValorVenda varchar(20) NOT NULL,
ValorCompra varchar(20) NULL,
unidade VARCHAR(30) NOT NULL,
bandeira VARCHAR(50) NOT NULL
);
CREATE TABLE revenda (
cnpj SMALLINT PRIMARY KEY,
regiao VARCHAR(2) NOT NULL,
estado VARCHAR(2) NOT NULL,
municipio VARCHAR(30) NOT NULL,
revenda VARCHAR(50) NOT NULL
);
CREATE TABLE produto (
id_produto SMALLINT NOT NULL UNIQUE AUTO_INCREMENT,
produto VARCHAR(30) NOT NULL,
ValorVenda FLOAT NOT NULL,
unidade VARCHAR(30) NOT NULL,
bandeira VARCHAR(50) NOT NULL
);
CREATE TABLE dados_adicionais (
id_dados SMALLINT NOT NULL UNIQUE AUTO_INCREMENT,
DataColeta DATETIME NULL,
ValorCompra FLOAT NULL
);
LOAD DATA INFILE '/2018-2_CA.txt'
INTO TABLE venda
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
这是我要导入的 CSV 文件。 https://www.dropbox.com/s/6c8ywz19xao7vmr/769525_1326400_compressed_2018-2_CA.csv.zip?dl=0
【问题讨论】:
我会尝试在其他地方上传。这是教授发来的链接,对不起。 【参考方案1】:您的 CSV 文件内部数据结构与导入规范不匹配。
您要用作目标的表结构(11 列):
CREATE TABLE venda (
regiao CHAR(2) NOT NULL,
estado CHAR(2) NOT NULL,
municipio VARCHAR(30) NOT NULL,
revenda VARCHAR(50) NOT NULL,
cnpj varchar(30) NOT NULL,
produto VARCHAR(30) NOT NULL,
DataColeta VARCHAR(30) NULL,
ValorVenda varchar(20) NOT NULL,
ValorCompra varchar(20) NULL,
unidade VARCHAR(30) NOT NULL,
bandeira VARCHAR(50) NOT NULL
);
CSV 的前 5 行:
Região - Sigla Estado - Sigla Município Revenda CNPJ da Revenda Produto Data da Coleta Valor de Venda Valor de Compra Unidade de Medida Bandeira
CO DF BRASILIA AM COMERCIAL DE COMBUSTIVEIS LTDA 08215644000109 DIESEL S10 08/11/2018 3,879 R$ / litro PETROBRAS DISTRIBUIDORA S.A.
CO DF BRASILIA AM COMERCIAL DE COMBUSTIVEIS LTDA 08215644000109 DIESEL S10 13/12/2018 3,767 3,2929 R$ / litro PETROBRAS DISTRIBUIDORA S.A.
CO DF BRASILIA AM COMERCIAL DE COMBUSTIVEIS LTDA 08215644000109 DIESEL S10 21/11/2018 3,987 3,4581 R$ / litro PETROBRAS DISTRIBUIDORA S.A.
CO DF BRASILIA AM COMERCIAL DE COMBUSTIVEIS LTDA 08215644000109 DIESEL S10 26/12/2018 3,767 3,2929 R$ / litro PETROBRAS DISTRIBUIDORA S.A.
进口规范:
FIELDS TERMINATED BY ','
值之间没有逗号 - 使用空格字符。而且空间的数量非常多。和逗号用作小数分隔符。 三元组错误。
ENCLOSED BY '"'
没有包含单独列值的双引号字符。 错误。
LINES TERMINATED BY '\r\n'
匹配。
另外 - 第 2 行(第 1 数据行)中的位置格式与其他数据行中的位置格式不同。
我建议仔细调整源数据和导入查询。最好的方法是接收具有适当数据格式的 CSV 文件。
作为一种缓解措施,您可以尝试创建解析表达式 (LOAD DATA INFILE ... SET)。
【讨论】:
嗨,所以我应该在导入之前编辑 csv?用逗号换点?这是我们老师给我们使用的文件,它很累。当输入工作工作台在所有字符之间放置空格时。我现在真的想这样做 4 天...... 我建议:删除第一行,将 CSV 导入 Excel(到一列中),解析到单独的列(按位置 - 使用“文本到列”),然后保存到 CSV,用一些分隔列值数据中不存在的奇异列分隔符(|
、~
或其他)。此外,将R$
之前不存在的数字数据用零转换。 PS。我不能这样做(尽管这并不困难),因为我什至无法定义列边界。以上是关于导入 CSV 文件时的 MySQL 问题 - 不显示错误,但不导入的主要内容,如果未能解决你的问题,请参考以下文章
使用 ADO 将大型 csv 文件导入 mdb 时的性能问题