csv文件导入Mysql的一些问题

背景

导入一些csv数据到Mysql,记录一下过程中出现的问题

数据源

csv文件的数据源为Sql Server,使用Sql Server导出csv文件的过程就不在赘述,过程中出现的问题如下:

正在验证 (错误) 消息 错误 0xc020802e: 数据流任务: “输入列“C301”(123)”的数据类型为
DT_NTEXT,ANSI 文件不支持此数据类型。请改用 DT_TEXT,然后使用数据转换组件将数据转换为 DT_NTEXT。 (SQL
Server 导入和导出向导)

错误 0xc004706b: 数据流任务: “组件“目标 - 1_TXT”(91)”验证失败,返回的验证状态为“VS_ISBROKEN”。
(SQL Server 导入和导出向导)

错误 0xc004700c: 数据流任务: 一个或多个组件未能通过验证。 (SQL Server 导入和导出向导)

错误 0xc0024107: 数据流任务: 任务验证期间出错。 (SQL Server 导入和导出向导)

出现这样的问题为字段类型兼容的问题,要在导入为csv时勾选unicode,这样就不会出现这样的错误

LOAD DATA INFILE

将csv文件导入mysql,我们使用LOAD DATA INFILE的方式,这种方式导入的速度很快。LOAD DATA INFILE的使用方式将会另外的博客中进行介绍。下面主要介绍在使用的过程中遇到的错误:

secute-file-priv

ERROR 1290 (HY000): The MySQL server is running with the –secure-file-priv option so it cannot execute this statement

这个是mysql为了保护数据安全性的设定,secute-file-priv这个参数来限制数据的导入和导出的效果,在执行LOAD DATA、SELECT … INTO OUTFILE等语句时,需要用户具有file的权限。

  • secute-file-priv为空,这个变量没有效果,允许任意的导入和导出的操作
  • secute-file-priv设为一个目录名,MySQL服务只允许在这个目录中执行文件的导入和导出操作。这个目录必须存在,MySQL服务不会创建它;
  • secute-file-priv为NULL,MySQL服务会禁止导入和导出操作。这个参数在MySQL 5.7.6版本引入

我们可以在mysql下执行如下命令查看当前secute-file-priv的状态:

show variables like '%secure%';

下图为当前的状态,我们可以把需要导入的文件放在/var/lib/mysql-files,这样便可以进行数据的导入操作了
csv文件导入Mysql的一些问题_第1张图片

Invalid utf8 character string

ERROR 1300 (HY000): Invalid utf8 character string: ”

出现这样的错误,为导入的csv格式中有不符合utf8的类型的数据
我们去查看csv文件的数据类型,使用如下的指令:

file XXX.csv

这里写图片描述
我们发现该文件的编码格式为UTF-16,后续我们将会对csv文件的编码进行更改,使其适应我们设定的数据格式
linux下更改csv文件编码格式,我们使用iconv进行操作。

iconv FactOrder_1w.csv -f UTF-16 -t UTF-8 -o FactOrder_utf8.csv 

格式为

iconv 文件名 -f 初始文件编码 -t 目标文件编码 -o 目标文件名

更改之后我们再使用file去查看文件格式,发现该csv文件的编码格式已经发生了变化,变成了utf-8

你可能感兴趣的:(Mysql)