如何在 DataGrip 中设置 LOAD DATA 工作目录?

Posted

技术标签:

【中文标题】如何在 DataGrip 中设置 LOAD DATA 工作目录?【英文标题】:How do I set a LOAD DATA working directory in DataGrip? 【发布时间】:2021-01-22 11:46:10 【问题描述】:

我在学校的一项任务是将一些 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的时候一定有办法设置工作目录吧?

【问题讨论】:

尝试使用 csv 的绝对路径(完整路径)。 是的,但这意味着该项目也不是很便携? 如果您的 csv 文件在当前工作目录(您连接 mariadb 的目录)上可用,那么它应该可以工作。 【参考方案1】:

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

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

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

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

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

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

【讨论】:

以上是关于如何在 DataGrip 中设置 LOAD DATA 工作目录?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Intellij / DataGrip Mongo DB Shell 中设置显示 20 多个结果

无法在 JetBrains DataGrip 2020.1.4 中设置 SQLServer 连接

如何将 datagrip 设置为与主机数据库相同的时区

如何从数据源文件中设置 var 值?

在变量中设置日期格式

如何在 Node.js 中设置 dotenv 文件?