2012-12-17 4 views
0

나는 정기적으로 CSV 파일을 MySQL 데이터베이스에 업로드하는 스크립트 작업을하고 있습니다. 문제는 CSV 파일의 필드 중 하나에 사용자가 생성 한 텍스트가 포함되어 있으며 인용문 및 기타 문자가 포함되어있어 MySQL에 친숙하지 않습니다.LOAD INFILE 전에 MySQL에 CSV 파일을 이스케이프

나는 CSV 파일을 업로드하는 가장 효율적인 방법은 MySQL의 'LOAD DATA INFILE'명령을 사용하는 것이라고 결론 내렸다. 이 phpadmin을 이용하여 database에 나타나는 나는 CSV 업로드 할 때 다음 명령은 다음과 같습니다

단순히 실행되는 프로세스가 즉시 종료이 명령은으로 작동하지 않습니다으로 CSV를로드
LOAD DATA LOCAL INFILE '/home/myfolder/tmp/property_re_1.csv' REPLACE INTO TABLE `markers` 
    FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' 
    LINES TERMINATED BY '\r\n' # 2 rows affected. 

' "'와" ESCAPED BY '\' "는 목적을 달성하지 못하는 것 같습니다.

이 경우에는 PHP를 사용하여 프로그래밍 방식으로 CSV 파일의 인용문을 이스케이프 처리해야 할 수 있습니다. SQL에서 LOAD DATA INFILE 명령을 사용하는 MySQL

"Best Practice"솔루션이있는 일반적인 문제입니다. 본질적으로 스크립트에는 t o CSV 파일을 MYSQL 테이블에로드하기 전에 CSV 파일을 "정리"하십시오. https://www.dropbox.com/sh/4iq10i51qlqyq8q/UjEQwvXKDA

감사를 사전에 도움을 : 여기

는 현명한 마음이 하나 주위에 머리를 포장하기 위해 내가 함께 일하고 실제 SQL 테이블과 CSV 파일에 대한 링크입니다.

+0

어떤 코드가 CSV를 생성합니까? CSV가 제대로 생성되면 아무런 문제가 없습니다. CSV가 제대로 생성되지 않으면 CSV 생성기를 수정하는 것이 가장 간단합니다. 파일이 사용자 정의라면, 걱정할 하나의 필드 그 이상이 있습니다. –

+0

CSV는 변경할 수없는 외부 데이터베이스에 의해 생성됩니다. – AME

답변

2

드롭 박스의 데이터 파일은 ,으로 구분 된 입력란 (선택 사항 : "으로 묶음), 줄은 \n으로 구분되며 헤더 행을 포함합니다. 위의 내용은 필드가 ;으로 분리 된 파일에 대한 것이며 항상 "으로 묶여 있으며 줄은 \r\n으로 구분되며 머리글 행은 포함되지 않습니다.

그렇다고 Dropbox의 파일 이름이 property_re_1.csv 인 반면 data.csv 파일이기도합니다.

 
mysql> CREATE TABLE IF NOT EXISTS `markers` ( 
    -> `L_ListingID` int(20) NOT NULL, 
    -> `L_Class` int(5) NOT NULL, 
    -> `L_Type_` int(10) NOT NULL, 
    -> `L_Status` varchar(10) NOT NULL, 
    -> `L_AskingPrice` float NOT NULL, 
    -> `L_Remarks` text NOT NULL, 
    -> `L_Address` varchar(50) NOT NULL, 
    -> `L_City` text NOT NULL, 
    -> `L_State` varchar(10) NOT NULL, 
    -> `LO1_OrganizationName` varchar(65) NOT NULL, 
    -> `LA1_AgentLicenseID` int(20) NOT NULL, 
    -> `LA1_UserFirstName` varchar(50) NOT NULL, 
    -> `LA1_UserLastName` varchar(50) NOT NULL, 
    -> `L_PictureCount` int(4) NOT NULL, 
    -> PRIMARY KEY (`L_ListingID`) 
    -> ) ENGINE=MyISAM DEFAULT CHARSET=latin1; 
Query OK, 0 rows affected (0.21 sec) 

mysql> LOAD DATA LOCAL INFILE 'property_re_1.csv' 
    -> REPLACE INTO TABLE `markers` 
    -> FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\' 
    -> LINES TERMINATED BY '\n' IGNORE 1 LINES; 
Query OK, 315 rows affected (0.01 sec) 
Records: 315 Deleted: 0 Skipped: 0 Warnings: 0 
+0

위대한 작품! 고맙습니다! – AME

+0

이 SQL 명령을 PHP 스크립트로 변환하려면 어떻게해야합니까? – AME

관련 문제