MySQL: 可选地由 '"' 插入 OUTFILE 变量名称
MySQL: OPTIONALLY ENCLOSED BY '"' Breaking INTO OUTFILE Variable Name
我一直在尝试使用可变文件名将 csv 文件正确导出到我的测试文件夹中 -- 我已经接近成功了,但我认为在它起作用之前我已经解决了一个问题。到目前为止,这是代码:
SET @q1 := CONCAT(
"SELECT *
FROM table
INTO OUTFILE '/SQLOut/test"
, DATE_FORMAT(NOW(),'%Y%m%d')
,".csv'"
, "FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'");
PREPARE s1 FROM @q1;
EXECUTE s1;
DROP PREPARE s1;
如您所见,我必须使用 prepared statements
才能使文件名包含今天的日期。那部分有效——但如果我想把它变成 csv,我需要在之后包含 'fields terminated' 东西,我认为这是破坏它的地方。
我相信,如果 OPTIONALLY ENCLOSED BY '"'
不包含 "
,这将按预期运行——它后面的双引号在 CONCAT(
之后关闭我原来的 "
'LINES TERMINATED BY '\n'");
的最后一行被截断,MySQL 变得混乱。
还有其他方法吗?
尝试:
SET @`qry` := CONCAT('
SELECT *
FROM `table`
INTO OUTFILE \'/SQLOut/test', DATE_FORMAT(NOW(), '%Y%m%d'), '.csv\'
FIELDS TERMINATED BY \',\' OPTIONALLY ENCLOSED BY \'"\'
LINES TERMINATED BY \'\n\'
');
PREPARE `stmt` FROM @`qry`;
EXECUTE `stmt`;
DROP PREPARE `stmt`;
我一直在尝试使用可变文件名将 csv 文件正确导出到我的测试文件夹中 -- 我已经接近成功了,但我认为在它起作用之前我已经解决了一个问题。到目前为止,这是代码:
SET @q1 := CONCAT(
"SELECT *
FROM table
INTO OUTFILE '/SQLOut/test"
, DATE_FORMAT(NOW(),'%Y%m%d')
,".csv'"
, "FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'");
PREPARE s1 FROM @q1;
EXECUTE s1;
DROP PREPARE s1;
如您所见,我必须使用 prepared statements
才能使文件名包含今天的日期。那部分有效——但如果我想把它变成 csv,我需要在之后包含 'fields terminated' 东西,我认为这是破坏它的地方。
我相信,如果 OPTIONALLY ENCLOSED BY '"'
不包含 "
,这将按预期运行——它后面的双引号在 CONCAT(
之后关闭我原来的 "
'LINES TERMINATED BY '\n'");
的最后一行被截断,MySQL 变得混乱。
还有其他方法吗?
尝试:
SET @`qry` := CONCAT('
SELECT *
FROM `table`
INTO OUTFILE \'/SQLOut/test', DATE_FORMAT(NOW(), '%Y%m%d'), '.csv\'
FIELDS TERMINATED BY \',\' OPTIONALLY ENCLOSED BY \'"\'
LINES TERMINATED BY \'\n\'
');
PREPARE `stmt` FROM @`qry`;
EXECUTE `stmt`;
DROP PREPARE `stmt`;