导入数据的语句
set character_set_client = utf8;
use sakila;
drop table stt;
create table stt
( id int not null,
str1 char(10) not null,
str2 varchar(60) not null,
str3 varchar(70) not null,
primary key(id)
) engine = InnoDB default charset = utf8mb4 ROW_FORMAT=COMPACT ;
insert into stt
values(2,'abcd22','!&','我爱中国');
复制
将上述语句存为 testimport.sql
a.命令行 mysql
在cmd中执行
mysql -uroot -p123 -Dsakila <C:\Users\86136\Downloads\testimport.sql
复制
-D 为执行数据库,如果SQL语句中没有显示use 指定数据库,命令行也没有加 -D 那么导入将报错
ERROR 1046 (3D000) at line 1: No database selected
如果没有执行字符集,有可能导致导入乱码
有一个小坑 在windows中要用cmd模式。不要用Powershell模式,否则会报错 不能识别<符号
所以建议:
1、 在SQL中显示指定character_set_client并放在最前面
2、 在SQL显示用use指定数据库,这样命令行就无需-D参数了。
b.命令行 source
先用mysql登陆后
执行
source C:\Users\86136\Downloads\testimport.sql
复制
source与mysql执行的区别是source能看到每个语句的结果
c.命令行 load data
准备好导入的文件aaa.csv
执行如下语句
load data local infile 'C:\\Users\\86136\\Downloads\\aaa.csv' into table sakila.stt fields terminated by ',' enclosed by '"' ignore 1 lines;
复制
ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides
报如上错误,在服务端开启
set global local_infile = on;
复制
继续执行上述命令
ERROR 2068 (HY000): LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.
继续报错,在客户端登陆的时候加上 --local-infile=1 参数
mysql -uroot -hlocalhost -p --local-infile=1
复制
再次执行上述命令
ERROR 1300 (HY000): Invalid utf8mb4 character string: ‘?\04B0’
将csv格式 用notepad++ 编码改为 utf-8
终于导入成功
Load命令要注意以下几点
如果参数使用local即本地导入
1、需要在服务器端设置 set global local_infile = on
2、客户端登陆的时候加上 --local-infile=1 参数
Load几个重要参数解释
fields terminated by 指定分隔符
enclosed by 去掉包裹符 比如"abc" enclosed by’"’ 后导入的就只剩abc
escaped by 设置转义符
ignore N lines 忽略N行
(col1,col2) 手动指定匹配的列
load data local infile 'C:\\Users\\86136\\Downloads\\aaa.csv' into table sakila.stt character set utf8mb4 fields terminated by ',' enclosed by '"' ignore 1 lines (id,str3,str2,str1);
复制
load data 官方文档
评论


