2014-05-14 6 views
0

MSSQL에서 가져온 일련의 이미지가 csv에 있습니다. 파일 크기는 1GB입니다. MSSQL의 데이터 유형은 이미지입니다. 바이트로 데이터 유형을 Postgres로 가져 오려고하면 오류가 발생했습니다. 내가 CSV 파일로 볼 때MSSQL에서 PostgreSQL으로 이미지 가져 오기

ERROR: invalid byte sequence for encoding "UTF8": 0xff
CONTEXT: COPY photo, line 1

이미지 파일은

0xFFD8FFE000104A46494600010101006000600000FFE1... 

내 질문에 :

이 유형의 파일을 가져올 수 있습니다 PostgreSQL의에서 어떤 데이터 타입
  1. ?
  2. Postgres 및 PHP를 사용하여이 유형의 파일에서 이미지를 검색하는 방법은 무엇입니까? 내가 시도

해결 방법 :

  1. 난 그냥 세 줄을 복사하고 새로운 CSV 파일로 저장, 사진 테이블로 가져올 것을 시도하고 성공. 이상한, 왜 전체 CSV 테이블을 가져 오려고 할 때 오류가 발생했습니다.
  2. 샘플 이미지를 사용하여이 PHP를 https://stackoverflow.com/a/22211207/3602791 시도했지만 성공했지만 가져온 세 줄 이미지를 가져올 때 내 이미지에 오류가 있음을 알리는 데 실패했습니다.

http://pastebin.com/WrfjFqY6 이것은 CSV 형식의 샘플입니다. 2 열, id 및 사진.

누구나 해결 방법을 알고 계십니까? 미리 감사드립니다.

+0

전체 CSV 라인을 표시 할 수 있습니까? CSV에서 16 진수로 표시되는 이미지입니까? 그렇다면 오류가별로 의미가 없습니다. 전체 입력 행과 오류를 표시하기 위해 실행 한 명령을 표시하십시오. –

+0

안녕하세요 @CraigRinger 나는 오류가 발생한 csv의 첫 번째 줄로 내 질문을 업데이트했습니다. 난 형식 및 구분 기호 (,)에 csv 옵션을 사용하여 pgadmin을 사용하여 데이터를 가져옵니다. 감사. – yeyen

+0

OK이므로 CSV에서 16 진수 텍스트로 표시됩니다. 이 경우 0xff 바이트가 나타나지 않기 때문에 오류가 발생하지 않습니다. 그러나 인쇄 할 수없는 문자이므로 확신하기가 어렵습니다. 추측하면이 파일은 실제로는 utf-8이 아니며 latin-1과 같은 다른 인코딩이며 인쇄 할 수없는 0xff가 포함되어 있습니다. 인쇄 할 수없는 문자를 표시하여 파일을 열고 볼 수있는 텍스트 편집기를 사용하십시오. –

답변

1

의견에있는 엔 엔 메모는 입력 내용이 UCS-2 (아마도 실제로는 UTF-16)로 인코딩 된 것이 었습니다.

UCS-2는 널 바이트를 포함하는 문자 당 2 바이트 인코딩입니다. PostgreSQL에 알려 주면 그 파일은 utf-8이고 그 입력은 유효하지 않은 utf-8 시퀀스로 가득 찬 쓰레기로 보일 것입니다. PostgreSQL에 latin1과 같은 간단한 1 바이트 인코딩을 지정하면 PostgreSQL은 0 바이트를보고 결국 latin-1이 아님을 알게됩니다.

트릭은 자동으로 BOM을 읽고 인코딩 된 텍스트로로드하는 텍스트 편집기를 사용하는 것뿐만 아니라 원시 바이트를 표시 할 수있는 편집기로 입력 파일을 검사하는 것입니다. 의심스러운 경우 16 진수 편집기를 사용하십시오.