【问题标题】:MYSQL: Synax Error on SELECT...INTO OUTFILEMYSQL:SELECT ... INTO OUTFILE 上的语法错误
【发布时间】:2017-12-13 14:37:12
【问题描述】:

在尝试选择输出文件(靠近文件名)时,我不断收到语法错误:(“错误 1064 (42000):您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本对应的手册在 '/path/file' FIELDS TERMINATED at line 3" 附近使用的正确语法)

这是查询:

SELECT Field
FROM Table
INTO OUTFILE ‘/path/test.csv’
FIELDS TERMINATED BY ‘,’
OPTIONALLY ENCLOSED BY “”
LINES TERMINATED BY ‘\n’
;

我在 FROM 之前/之后尝试过“INTO”,许多路径(并且没有路径),删除了 Terminated/Enclosed,确保查询运行以打印到 Shell(有效),确保用户(root)有 . 授予文件权限,确保secure_file_priv = “”,单v双引号等......

虽然我查看了许多网站上的许多页面,这些页面似乎处理了该问题的变体,但我没有发现任何可行的方法。这显然是一些非常简单的错误(某种特权?),但我很难过。

我通过终端在 MAC OS X 上使用 MYSQL 5.7.18。提前致谢。

添加:处理 20 毫米以上的行并打开其他方式以将输出作为从 Shell 复制/粘贴到文件中的方式当然不是现实的选择。

【问题讨论】:

  • 字符串需要单引号 (')。您的单引号字符看起来不太正确。
  • @GordonLinoff:谢谢,我理解并同意。不幸的是,在概括查询时,这是原始帖子中的错字。需要明确的是,上面使用相同的问题:SELECT Field FROM Table INTO OUTFILE “~/var/test.csv” FIELDS TERMINATED BY “,” OPTIONALLY ENCLOSED BY “” LINES TERMINATED BY “\n” ;

标签: mysql into-outfile


【解决方案1】:

您可能在语法中使用了正向刻度和反向刻度(您是从网站/教程中剪切和粘贴的吗?)

用“/path/test.csv”代替“/path/test.csv”

试试这个(我也在 OSX 上使用 MySQL)

mysql> create table foo (a varchar(10));
mysql> insert into foo values ('a');
mysql> insert into foo values ('b');

最后,

mysql> SELECT a FROM foo INTO OUTFILE "~/tmp/test.csv" FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY "" LINES TERMINATED BY "\n" ;
Query OK, 3 rows affected (0.00 sec)

我使用双引号来避免对刻度的混淆。

【讨论】:

  • 我只是输入了它,而不是剪切/粘贴。我刚刚尝试使用所有正向刻度,然后使用所有反向刻度,并且每次都收到相同的错误(与原始刻度相同)。不过,我没有考虑过这种可能性,谢谢。
  • 我重新阅读了原始帖子并查看了上面提供的答案的基础。为了清楚起见,我尝试使用以下语法并收到与原始帖子中所述相同的错误:SELECT Field FROM Table INTO OUTFILE '~/tmp/test.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY “” LINES TERMINATED BY '\n' ;
  • 执行上面的(“foo”),我确实收到了一个不同的错误:(错误1(HY000):无法创建/写入文件“/var/empty/tmp/test. csv”(错误代码:2 - 没有这样的文件或目录))。我将(“foo”)路径更改为 '~/var/filename' 并似乎运行,但实际上只是处于“SLEEP”状态,但似乎没有错误。但是,我使用“~/var/filename”返回到原来的查询,仍然收到原来的错误(现在对所有都使用双引号)。
  • 我注意到“var/empty/”中没有“tmp”文件夹,所以我创建了一个,授予所有用户权限,并且您编写的 Select Into 工作正常。但是,我不能用其他查询复制它。此外,我删除了 test.csv,打开了新的 Shell 并运行了相同的“foo”查询,并且无法复制之前的成功(重新运行 test2 失败)。看来(从上面的错误消息 2 cmets 和一次成功)我的配置需要写入 /var/empty/tmp ,这可能是迄今为止最好的“答案”。然而,不知道如何解释看似随机的结果。
  • 已解决。我将我的文本(来自 TextEdit)粘贴到 WorkBench 中并重新输入引号,然后将其粘贴回 Shell,并且现在可以正常工作(直接输入 Shell 时也可以正常工作)。总结答案:我似乎被配置为写入 var/empty/tmp(对我来说很好),并且我的角色在 TextEdit 和 Shell 之间以某种方式被操纵。感谢大家帮助我完成这些简单的项目。
【解决方案2】:

这对双引号似乎是问题所在。 试试

SELECT Field
FROM Table
INTO OUTFILE ‘/path/test.csv’
FIELDS TERMINATED BY ‘,’
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY ‘\n’
;

【讨论】:

  • 在对所有 3 个实例使用单引号时收到相同的错误。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多