MySql 使用load data local infile导入文件

想在mysql8.0.32里导入txt文件,遇到几个报错,找到一些解决方法,在这里归纳整理:

1、中文操作手册里,查到用以下语句可以实现导入。

mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;

但出现报错:

10:47:28    LOAD DATA LOCAL INFILE 'D:\mysql学习\menagerie-db\pet.txt' INTO TABLE pet    Error Code: 3948. Loading local data is disabled; this must be enabled on both the client and server sides    0.000 sec

解决方法:

Step1:检查一个全局系统变量 'local_infile' 的状态:

show global variables like 'local_infile';

如果得到如下显示 Value=OFF,则说明这是不可用的。如果得到的是 Value=ON,请直接跳往Step3

Step2:要把这个值变为 ON,这里找到两种方法:

第一种方法:

       1).在mysql客户端输入:

set global local_infile=1;

        2).然后退出quit 退出mysql。再次进入时,便会出现 Value=ON 

第二种方法:

       1).在 C:\ProgramData\MySQL\MySQL Server 8.0(此处为Windows10系统) 路径下,找到初始化文件 my.ini,打开

       2).找到以 [client], [mysql], [mysqld] 开头的三处位置,在每处的下面加一行  local_infile=ON,保存更改

      3).重启mysql服务器后,同样会得到预期的结果

Step3:     

 在进入数据库的命令行要加上 --local_infile=1 这个配置,具体如下:

mysql --local_infile=1 -u <username> -p

 2、我把local_infile变量设置成ON。

然后再执行mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;

仍然报错:

10:52:12    LOAD DATA LOCAL INFILE 'D:\mysql学习\menagerie-db\pet.txt' INTO TABLE pet    Error Code: 2068. LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.    0.000 sec

 继续找解决方案。

在workbench里面导数,步骤如下:
Step1:执行代码:show variables like '%secure%'; 查看安全路径;

Step2:找到安全路径,把数据文件拷贝进去。这里注意的是,ProgramData文件夹默认情况下是隐藏的,需要把它显示出来,再把文件烤进去。

Step3:最后执行以下导入语句,注意路径里的双斜杠 '\\',导入成功了!

LOAD DATA  INFILE 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\pet.txt' INTO TABLE pet1;

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
MySQL的`LOAD DATA LOCAL INFILE`命令中,当导入数据时,MySQL会根据数据文件中的内容来进行数据类型推断。如果数据文件中的某一列被解释为整数类型,而实际上该列包含了字符串数据(如VARCHAR类型),那么MySQL会尝试将该列转换为整数类型。 这种情况下,可能是由于数据文件中的某些行中的数据不符合该列定义的数据类型,导致了自动转换错误。MySQL会根据一些规则进行自动转换,例如将非数字字符转换为0或忽略该行数据。 为了避免这种情况,你可以在`LOAD DATA LOCAL INFILE`命令中明确指定每列的数据类型,而不依赖于自动推断。使用`FIELDS TERMINATED BY`和`LINES TERMINATED BY`来指定字段和行的分隔符,并使用`SET`关键字来指定每列的数据类型。 例如,假设你有一个包含字符串的CSV文件(以逗号分隔),其中一列应该是VARCHAR类型。你可以使用以下命令来导入数据并明确指定数据类型: ```sql LOAD DATA LOCAL INFILE 'data.csv' INTO TABLE your_table FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (column1, @var1, column3) SET column2 = CAST(@var1 AS VARCHAR(255)); ``` 在上面的命令中,我们使用了一个用户变量`@var1`来临时存储数据,并使用`CAST`函数将其转换为VARCHAR类型,并将其赋给目标列`column2`。 通过明确指定每列的数据类型,你可以确保导入数据时不会发生意外的类型转换。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值