[SQL] OUTFILE로 MySQL의 수출 : CSV 탈출 문자
SQLOUTFILE로 MySQL의 수출 : CSV 탈출 문자
나는 몇 가지 일반적인 필드 작업 표의 데이터베이스 테이블을했습니다.
id, client_id, project_id, task_id, description, time, date
이 이상하지만 그것의 요점을 이잖아.
나는 수출은 사용자에게 데이터의 백업을 제공하는 CSV 파일 하룻밤에 해당 테이블에서 실행해야합니다. 또한 일부 사용자 정의 보고서와 매크로 엑셀 파일의 데이터 가져 오기로 사용됩니다.
이 모든 날 PHP로 작업 표를 통해 반복 및 파일에 줄을 인쇄와 함께 작동합니다.
문제는 허용하지 않은 실행하는 데 시간이 걸릴 수 있습니다 큰 데이터베이스입니다. 나는 MySQL의 INTO OUTFILE 명령을 재 작성하고 그래서 좋았어요 실행에 몇 초에 아래로 감소.
문제는 지금은 설명 필드에 등 모든 새로운 라인 문자를 탈출 할 수없는 것입니다. 정말, 사용자는 여기에 캐리지 리턴 / 새 라인을 포함한 잠재적으로 문자 조합을 입력 할 수 있습니다.
이것은 내가 가지고있는 MySQL의 코드 조각입니다 :
SELECT id,
client,
project,
task,
REPLACE(REPLACE(ifnull(ts.description,''),'\n',' '),'\r',' ') AS description,
time,
date
INTO OUTFILE '/path/to/file.csv'
FIELDS ESCAPED BY '""'
TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM ....
그러나...
내가 출력 파일의 소스에서보기를하려고하면, 줄 바꿈은 여전히 때문에 엑셀의 CSV 가져 오기는 모든 멋진 매크로를 중단하고 피벗 테이블은 엑셀 마법사가 만든 파일에 존재합니다.
행동의 최고의 코스에서 어떤 생각?
해결법
-
==============================
1.나는 당신의 문을 같이한다고 생각합니다 :
나는 당신의 문을 같이한다고 생각합니다 :
SELECT id, client, project, task, description, time, date INTO OUTFILE '/path/to/file.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM ts
주로 필드 ' "옵션을 선택적으로 동봉 BY'" ' "'설명 필드 등의 트릭을 할 것 BY 탈출하고 숫자 (안 문자열이 수치의 포함) Excel에서 숫자로 처리됩니다없이
또한 호출 시도 :
SET NAMES utf8;
당신의 OUTFILE을 선택하기 전에, 인라인 문자 인코딩을 받고 그 힘 도움말 (모든 UTF8)
우리는 당신이 얻을 방법을 알려주세요.
-
==============================
2.여기 여기 일 것입니다 : 시뮬레이션합니다 엑셀 2003 (저장 CSV 형식으로)
여기 여기 일 것입니다 : 시뮬레이션합니다 엑셀 2003 (저장 CSV 형식으로)
SELECT REPLACE( IFNULL(notes, ''), '\r\n' , '\n' ) AS notes FROM sometables INTO OUTFILE '/tmp/test.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n';
-
==============================
3.다음을 시도하면 어떻게됩니까?
다음을 시도하면 어떻게됩니까?
대신에 두 번 문을 교체 당신의 시도 :
REPLACE(IFNULL(ts.description, ''),'\r\n', '\n')
또한, 나는 그것이 LINES 그냥 '\ 연구 \ n'대신 '\ n'을 종료해야한다고 생각
-
==============================
4.사실 확인을 위해 출력 파일을 보지 않고, 내 생각 엔 당신이 FIELDS 가치로 이스케이프 없애 가지고 있다는 것입니다.
사실 확인을 위해 출력 파일을 보지 않고, 내 생각 엔 당신이 FIELDS 가치로 이스케이프 없애 가지고 있다는 것입니다.
에 하나의 인용 부호와 동일하므로 귀하의 경우는 아마도, (1)은 하나 개의 문자로 의미;의 MySQL의 필드 BY 아마이 개 당신에 계산되지 않았 음 방식으로 작동하고 ESCAPED (2)는 MySQL은 BY와 가치에 의해 종료 LINES를 종료 필드를 포함, 탈출의 필요를 생각하는 각 문자를 앞에하는 데 사용됩니다. 이것은 컴퓨팅 세계의 대부분에 의미가 있지만, Excel에서 탈출 않는 방법이 아니다.
난 당신이 성공적으로 (Windows 스타일의 뉴 라인의 경우 두 개의 공백을) 공백 문자 줄 바꿈을 교체하는 것을 당신의 두 배가 작동 교체 생각합니다. 당신이 당신의 데이터 (리터럴이 아닌 필드 분리)에있는 쉼표가있는 경우 그러나, 이러한 엑셀 취급 많은 다른 MySQL을보다 따옴표 앞에되고있다. 그런 경우, 다음 Excel 일인가하는 잘못된 줄 바꿈은 MySQL이 줄 끝으로 의도했던 것을 줄 바꿈 사실이다.
-
==============================
5.아마 도움이되지 않습니다하지만 당신은 그 내용으로 CSV 테이블을 만드는 시도 할 수 :
아마 도움이되지 않습니다하지만 당신은 그 내용으로 CSV 테이블을 만드는 시도 할 수 :
DROP TABLE IF EXISTS foo_export; CREATE TABLE foo_export LIKE foo; ALTER TABLE foo_export ENGINE=CSV; INSERT INTO foo_export SELECT id, client, project, task, REPLACE(REPLACE(ifnull(ts.description,''),'\n',' '),'\r',' ') AS description, time, date FROM ....
from https://stackoverflow.com/questions/1119312/mysql-export-into-outfile-csv-escaping-chars by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 나는 VARCHAR 또는 INT의 기본 키가있는 테이블을 설계해야 하는가? (0) | 2020.04.19 |
---|---|
[SQL] 중복을 무시하고, 다른 한 테이블에서 행을 복사 (0) | 2020.04.18 |
[SQL] 고유 값의 발생을 카운트 (0) | 2020.04.18 |
[SQL] SQL / MySQL의에서 "ON"과 "WHERE"의 차이는 문을 조인 무엇입니까? (0) | 2020.04.18 |
[SQL] PL / SQL의 기능과 절차의 차이점은 무엇입니까? (0) | 2020.04.18 |