【问题标题】:INTO OUTFILE using Execute StatementINTO OUTFILE 使用执行语句
【发布时间】:2020-09-09 23:23:07
【问题描述】:

我需要从 mysql 数据库中获取数据。我有以下类似:

set @filename=concat('/home/reports/',current_timestamp(),'.csv');
set @querys=concat("select * from  tablename limit 10 ",
"into outfile ? fields terminated by ',';");
prepare s1 from @querys;
execute s1 using @filename;
deallocate prepare s1;

我得到了这个错误:错误代码:1064。你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 '? 附近使用的正确语法。第 1 行以“,”结尾的字段
你知道为什么吗?

【问题讨论】:

    标签: mysql sql select dynamic-sql into-outfile


    【解决方案1】:

    我非常怀疑 MySQL 是否支持在 insert into outfile 语法中将查询字符串作为参数传递。您需要改为进行字符串连接。引用文件名也是一个好主意,因为它将包含空白字符。

    set @filename = concat('/home/reports/', current_timestamp(), '.csv');
    
    set @query=
        concat(
            "insert into outfile '", 
            @filename, 
            "' select * from  tablename limit 10 ",
           "fields terminated by ',';"
        );
    
    prepare s1 from @query;
    execute s1;
    deallocate prepare s1;
    

    【讨论】:

      【解决方案2】:

      我认为你的查询语法错误,应该是

      SELECT * INTO OUTFILE '/tmp/USERS.csv' from users FIELDS TERMINATED BY ',' ENCLOSED BY '"' limit 10;
      

      还要检查中提到的路径位置:

      mysql> SELECT @@secure_file_priv;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-13
        • 1970-01-01
        • 1970-01-01
        • 2021-02-07
        • 2011-02-21
        相关资源
        最近更新 更多