我在Datagrip中使用LOAD DATA LOCAL INFILE
语句有困难。假设我有source_data.csv
,如:
rating,statement
-2,"I'm hungry!"
5,"I'm satisfied."
1,"Ok, but could be better."
在DataGrip中运行以下代码块之后:
# loading_sample_table.sql
USE sample_db;
DROP TABLE IF EXISTS sample_table;
CREATE TABLE sample_table (rating int, statement varchar(50), id serial);
LOAD DATA
LOCAL INFILE 'absolute/path/to/my/source_data.csv'
INTO TABLE sample_table
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\''
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(rating, statement);
我收到以下错误:
[42000][1148] The used command is not allowed with this MySQL version
在SHOW VARIABLES LIKE "%version%";
外壳或DataGrip中运行
+--------------------------+-------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------+
| immediate_server_version | 999999 |
| innodb_version | 8.0.18 |
| original_server_version | 999999 |
| protocol_version | 10 |
| slave_type_conversions | |
| tls_version | TLSv1,TLSv1.1,TLSv1.2,TLSv1.3 |
| version | 8.0.18 |
| version_comment | MySQL Community Server - GPL |
| version_compile_machine | x86_64 |
| version_compile_os | macos10.14 |
| version_compile_zlib | 1.2.11 |
+--------------------------+-------------------------------+
然后,如果我尝试以上相同的命令,但从代码块中删除LOCAL
,则会收到以下错误:
[HY000][13] Can't get stat of 'absolute/path/to/my/source_data.csv' (OS errno 13 - Permission denied)
另外,我检查了SHOW GLOBAL VARIABLES LIKE 'local_infile';
,可以看到:
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile | ON |
+---------------+-------+
但是,如果从我的终端运行:
mysql --local-infile=1 -uroot -p < 'absolute/path/to/my/loading_sample_table.sql'
输入我的根密码后,该文件将成功运行。理想情况下,我希望在DataGrip中完成所有事情。不确定如何调试此问题。
发布于 2020-05-09 23:08:39
我能够将以下参数添加到服务器端连接字符串中,并且它在不需要降级驱动程序版本的情况下工作:
jdbc:mysql://localhost:3306/?allowLoadLocalInfile=true
发布于 2020-05-09 12:14:21
它看起来像是MySQL JDBC驱动程序问题。
切换到MySQL JDBC驱动程序5.1.47
,由DataGrip提供以解决此问题。
若要更改JDBC驱动程序版本,请执行以下操作:
Go to driver
5.1.47
加载数据本地不确定结果:
https://dba.stackexchange.com/questions/266798
复制相似问题