2014-01-08 5 views
1

로드 데이터 infile 문을 사용하여 여러 텍스트 파일을 데이터베이스에로드하고 있습니다. 각 숫자 필드에 숫자 값을로드하려고 할 때 문제가있는 것 같습니다. 몇 가지 조사를했고 MySQL documentation에 따라로드 된 모든 데이터가 텍스트로 처리되므로 모든 값이 null로 입력됩니다. 당신이 INSERT와 ENUM 또는 SET 열의 문을 당신이 할 수있는 방법을 숫자 값을 사용할 수 있도록MySQL에서 varchar 값을 합하는 방법

LOAD 데이터 INFILE은 문자열로 모든 입력을 간주한다. 모든 ENUM 및 SET 값은 문자열로 지정해야합니다.

숫자 또는 십진수로 특정 필드를 캐스팅했는데 여전히 테이블에 null 값이 있습니다.

I.E. 때로는 부정적인 데이터 괄호에 있기 때문에

LOAD DATA INFILE 'blabla.txt' INTO TABLE example FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '' LINES TERMINATED BY '\r\n' ignore 1 lines 
(field1, field2, field3, @problemfield,) 

set problemfield= cast((REPLACE(REPLACE(REPLACE(@problemfield,',',''),'(', '-'), ')','')) as DECIMAL(10,0)); 

것은 나는을 대체 사용하고 있습니다.

로딩과 많은 응답 (현재 링크를 찾을 수 없음)에서 텍스트로드로 제안한 다음 새로운 숫자 필드로 이동하고 이전 필드를 삭제할 때 캐스팅에 관한 비슷한 질문이 최적의 솔루션입니까? 이 문제는 대개 어떻게 처리됩니까? 이 시나리오는 많이 발생해야합니다 (이 텍스트 데이터를 모두로드하고 작업을 수행해야 함).

+1

매뉴얼에서 인용 한 인용문 ('ENUM' 및'SET' 열에 관한 것)은 부적합합니다. 입력이 문자열로 입력 되었기 때문에 MySQL이 삽입시 숫자 유형으로 올바르게 변환되는 것을 막지 않아야합니다. 특히 문자열을 유효하게 만들기 위해 조작 한 후 수동으로 캐스팅해야합니다. 대부분 파일 형식에는 처리하지 않는 특이성이 있습니다. 샘플 추출물을 보여줄 수 있습니까? – eggyal

답변

0

데이터를 준비 테이블에로드하십시오. 필요에 따라 조작하십시오. 스테이징 테이블에서 실제 테이블에 기록하십시오.

관련 문제