在DataGrip中使用LOAD DATA时如何设置工作目录?
报错核心原因
LOAD DATA LOCAL INFILE的文件读取逻辑由数据库客户端完成,路径解析规则和DataGrip文件面板里的SQL目录、工作区目录没有自动绑定关系,不存在可以直接修改的全局默认工作目录开关,可通过以下方案解决文件识别失败的问题:
方案1:直接使用文件绝对路径(零配置,最稳妥)
不要使用相对路径'products.csv',把CSV文件在本地系统的完整路径写入语句即可,注意适配路径转义规则:
- Windows 系统写法(使用正斜杠或双反斜杠,避免SQL转义异常):
LOAD DATA LOCAL INFILE 'D:/school-assignment/products.csv' INTO TABLE products CHARSET utf8 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES (product_id, name ...) ;
注意Windows系统不要直接写单反斜杠路径(比如D:\school-assignment\products.csv),会被SQL语法解析为转义符,导致路径识别失败
- macOS / Linux 系统写法:
LOAD DATA LOCAL INFILE '/home/your-name/school-assignment/products.csv' INTO TABLE products CHARSET utf8 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES (product_id, name ...) ;
方案2:修改DataGrip连接的客户端工作目录(保留相对路径写法)
如果你希望继续使用'products.csv'这种简洁的相对路径写法,可以调整数据库连接的执行环境配置:
- 打开对应MariaDB连接的配置页
- 找到执行配置栏的「客户端工作目录」设置项
- 将路径指定为你存放CSV和SQL脚本的同一文件夹
- 保存配置后重新建立数据库连接,再执行原语句即可正常识别相对路径下的文件
补充:非LOCAL版本LOAD DATA的路径规则说明
如果你后续替换成不带LOCAL关键字的LOAD DATA INFILE语句,此时文件是由MariaDB服务端直接读取,路径是相对于服务端运行时的工作目录,而非你本地电脑的路径,需要满足两个条件才能正常读取:
- 把CSV文件上传到服务端允许访问的目录下
- 提前确认服务端
secure_file_priv配置开放了对应目录的读取权限
注意:如果执行语句时提示本地文件加载被拦截,需要同时确认两个配置:
- 服务端的
local_infile参数处于开启状态- DataGrip的数据库连接设置里勾选了「允许加载本地文件」选项
内容的提问来源于stack exchange,提问作者nwpullman
相关产品推荐
相关产品推荐

