2009-06-23 5 views
8

각 행의 두 열에서 데이터를 파일로 내보내는 쿼리가 있습니다.MySQL : 쿼리의 캐리지 리턴

row1column1
row1column2
row2column1
row2column2
row3column1
row3column2

I는 숯을 사용하여 시도 (13) 각각의 열에서 파일 데이터에 캐리지 리턴이 같은 구분해야 :

SELECT CONCAT(column1, char(13), column2) FROM my_table INTO outfile 'my_file' 

출력 파일은 완벽하게 보였습니다 (eac h 열 데이터가 다른 행에 있음), 설명 된 형식을 받아 들여야하는 프로그램의 입력으로 사용했을 때이를 인식하지 못했습니다. 그러나 수동으로 파일의 모든 캐리지 리턴을 지우고 "Enter"키를 눌러 다시 추가 할 때 내 프로그램은 문제없이 파일을 인식했습니다. 확실 해요

row2column1
\

row1column1
row1column2

\ row2column1 : 나는 CHAR (13), 문자 (10)와 시도 내 출력 파일이처럼 보였다 나는 여기에 명백한 뭔가를 놓치고있어 :)

+0

어떤 파일 출력 형식이 이고, csv 파일입니까? –

답변

7

나는 그것을 mysql 사이트에서 보시길 바랍니다. '' ''로 이스케이프 OUTFILE '/temp.csv'FIELDS INTO

... :

당신은 Microsoft Excel에서 예상하는 형식 에서 CSV 파일을 생성 에 다음 구문을 사용합니다 ','종료 '\ 연구 \ n'을 종료 LINES ENCLOSED BY ' "';

그러나 캐리지 필드 자동으로 필드를 닫습니다 MySQL을로 CSV를 깰 수 을 반환 할 때 \ r \ n 줄 바꿈이 있습니다. 이 문제를 해결하려면 을 모두 사용하려면 \ r \ n은 (는) 을 \ n으로 바꿉니다. 필드가 에서 닫히지 않고 \ n 중단되며 Excel의 단일 셀 으로 읽혀집니다. 당신은 예를 들어, 동일한 SQL 문이 을 수행 할 수 있습니다

SELECT가 REPLACE (field_with_line_breaks을 는 '\ r은 N \', '\ n을') OUTFILE '/temp.csv'INTO 테이블은 FIELDS 탈출 종료 라인 ' " 이 둘러싸인', '종료' '' ''에 의해 '\ 연구 \ n'을,

는 또한 null 값이 CSV를 깰 수 있다는 것을 발견 이들은 A의 처리 할 수 ​​있습니다. 비슷한 방식 :

SELECT IFNULL (possible_null_field, "") FROM table INTO OUTFILE '/ 임시 직원." '로 둘러싸인' ' 종료'", "CSV '로 이스케이프 FIELDS' '라인에 의해 종료'\ 연구 \ n '을,

참고 :이 와 기술적으로 빈 문자열을 NULL 값을 대체 하지 같은 일이지만이 왼쪽에 다음 세포를 이동 csv로 구조를 파괴하고 대신 당신에게 Excel에서 빈 셀을 을 줄 것이다

4

(10)을 단지 문자 시도는 -. 그 \ "입니다 n "- UNIX 방식
그냥 char (13) "\ r"은 (오래된) Mac 방식이고 "\ r \ n"은 Windows 방식이지만, MySQL은 각 행마다 \ n을 사용한다고 생각합니다. 그래서 일치시켜야합니다.

+0

그냥 두 개의 열 사이에 "\"를 넣습니다. – Daniel

+0

CLI (mysql -Ne)에서 쿼리가 작동하도록하려면 -r을 사용하여 변환하지 않고 필드를 작성해야합니다. --batch와 함께 사용됩니다. HTH, 댄. –

1

운영 체제 간의 줄 바꿈 해석의 차이점이있을 수 있습니다. MySQL 데이터베이스가 켜져 있으면

select * into outfile 'my_file' 
fields terminated by '\n' lines terminated by '\n' 
from my_table; 

:

MySQL 데이터베이스는 유닉스/리눅스에, 그리고 파일이 유닉스에서 읽을 수 있습니다 또는 데이터베이스가 윈도우에 다음이 시도 Windows에서 읽을 경우

작은, 명령 줄을 사용 (UNIX) 줄 바꿈을

select * into outfile 'my_file' 
fields terminated by '\r\n' lines terminated by '\r\n' 
from my_table; 

또한 "CRLF"(윈도우)와 "LF"사이에 파일을 변환 할 수 있습니다 : 유닉스/리눅스 및 파일을 Windows에서 읽을 수 있습니다 다음이 시도 dos2unix 및 unix2dos라는 유틸리티는 대부분의 Linux 배포판에 포함되어 있습니다.

4

하임 Evgi의 응답 작동하지만 :

SELECT REPLACE(field_with_line_breaks, '\r\n', '\n') FROM table INTO OUTFILE '/temp.csv' FIELDS ESCAPED BY '""' TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n'; 

나는 변경했다 : 필드에 큰 따옴표가 MySQL의에서이 오류를 준,로 이스케이프 있었다

SELECT REPLACE(field_with_line_breaks, '\r\n', '\n') FROM table INTO OUTFILE '/temp.csv' FIELDS ESCAPED BY '"' TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n'; 

" 오류 1083 : 필드 구분 기호 인수가 예상 한 것이 아니므로 설명서를 확인하십시오. "

작은 따옴표로 변경하면 오류가 중지되고 파일을 내 보냅니다. 성공적으로 개조 된 개행 문자를 사용하여 Excel로 가져올 수있었습니다.

+0

저는 하임 에이지의 대답을 편집해야한다고 생각합니다. 내가 그거 했어; 그것은 아직 승인되지 않았습니다. –

관련 문제