如何在 DataGrip 中设置加载数据工作目录?

How do I set a LOAD DATA working directory in DataGrip?

我在学校有一项任务,要将一些 CSV 数据加载到我的 MariaDB 实例中。导入如下:

LOAD DATA LOCAL INFILE 'products.csv'
INTO TABLE products
CHARSET utf8
FIELDS
    TERMINATED BY ','
    ENCLOSED BY '"'
LINES
    TERMINATED BY '\n'
IGNORE 1 LINES
(product_id, name ...)
;

SQL 和 CSV 文件都在“文件”面板中的同一目录中。

我得到的(非常合乎逻辑的)错误是:

[2021-01-22 12:34:41] [22000][-1] (conn=184) Could not send file : products.csv (No such file or directory)

我知道 DataGrip 有一个“从文件导入数据”工具。但是在使用 LOAD DATA 时一定有办法设置工作目录吧?

没有为 LOAD DATA LOCAL INFILE 设置默认目录的选项。

向服务器发送LOAD DATA LOCAL INFILE语句后,服务器解析该语句提取文件名并向客户端请求指定文件名的内容。

如果客户端无法打开文件,将返回错误。

因此,如果您没有指定路径和文件名,请确保该文件位于您当前的工作目录中(这可能与您的应用程序启动的目录不同)。

最佳做法始终是指定完整路径。

MySQL 8 例如提供设置选项 MYSQL_OPT_LOAD_DATA_LOCAL_DIR,
这会影响 LOAD DATA 操作的客户端 LOCAL 功能。它指定在 LOAD DATA LOCAL 语句中命名的文件必须位于的目录。