멀티바이트 문자 로드 오류 - Amazon Redshift

멀티바이트 문자 로드 오류

CHAR 데이터 형식인 열은 1바이트 UTF-8 문자 127바이트까지 또는 ASCII 문자 세트이기도 한 7F 16진수만을 허용합니다. VARCHAR 열은 최대 4바이트까지 멀티바이트 UTF-8 문자를 허용합니다. 자세한 내용은 문자 형식 단원을 참조하십시오.

로드 데이터의 줄에 열 데이터 형식에 맞지 않는 문자가 포함되어 있는 경우, COPY는 오류를 반환하고 STL_LOAD_ERRORS 시스템 로그 테이블에 오류 번호 1220을 사용하여 행을 기록합니다. ERR_REASON 필드에는 잘못된 문자의 바이트 시퀀스가 16진수로 포함되어 있습니다.

로드 데이터의 유효하지 않은 문자를 수정하는 대신 로드 프로세스 도중 유효하지 않은 문자를 대체할 수 있습니다. 유효하지 않은 UTF-8 문자를 대체하려면 COPY 명령에서 ACCEPTINVCHARS 옵션을 지정합니다. ACCEPTINVCHARS 옵션이 설정되면 지정한 문자가 코드 포인트를 대체합니다. ACCEPTINVCHARS 옵션이 설정되지 않은 경우 Amazon Redshift는 문자를 유효한 UTF-8로 수락합니다. 자세한 내용은 ACCEPTINVCHARS 단원을 참조하십시오.

다음 코드 포인트 목록은 유효한 UTF-8이며 ACCEPTINVCHARS 옵션이 설정되지 않은 경우 COPY 작업은 오류를 반환하지 않습니다. 그러나 이러한 코드 포인트는 유효하지 않은 문자입니다. ACCEPTINVCHARS 옵션을 사용하여 코드 포인트를 지정한 문자로 바꿀 수 있습니다. 이러한 코드 포인트에는 0xFDD0~0xFDEF의 값 범위와 FFFE 또는 FFFF로 끝나는 0x10FFFF까지의 값이 포함됩니다.

  • 0xFFFE, 0x1FFFE, 0x2FFFE, …, 0xFFFFE, 0x10FFFE

  • 0xFFFF, 0x1FFFF, 0x2FFFF, …, 0xFFFFF, 0x10FFFF

다음 예는 COPY가 UTF-8 문자 e0 a1 c7a4를 CHAR 열로 로드하려 할 때 발생하는 오류 이유를 보여줍니다.

Multibyte character not supported for CHAR (Hint: Try using VARCHAR). Invalid char: e0 a1 c7a4

오류가 VARCHAR 데이터 형식과 관련된 경우, 유효하지 않은 UTF-8 16진수 시퀀스뿐 아니라 오류 코드도 오류 이유에 포함됩니다. 다음 예는 COPY가 UTF-8 a4를 VARCHAR 필드로 로드하려 할 때 발생하는 오류 이유를 보여줍니다.

String contains invalid or unsupported UTF-8 codepoints. Bad UTF-8 hex sequence: a4 (error 3)

다음 표에는 VARCHAR 로드 오류의 설명과 해결 방법 제안이 나와 있습니다. 이런 오류 중 하나가 발생하면 문자를 유효한 UTF-8 코드 시퀀스로 대체하거나 문자를 삭제하십시오.

오류 코드 설명
1 UTF-8 바이트 시퀀스가 VARCHAR가 지원하는 최대 4바이트를 초과합니다.
2 UTF-8 바이트 시퀀스가 불완전합니다. COPY가 문자열 끝 앞에서 멀티바이트 문자의 예상되는 연속 바이트 수를 찾지 못했습니다.
3 UTF-8 1바이트 문자가 범위를 초과합니다. 시작 바이트는 254, 255이거나 128과 191 사이의 문자여서는 안 됩니다(128과 191도 포함).
4 바이트 시퀀스의 후행 바이트 값이 범위를 초과합니다. 연속 바이트는 128에서 191 사이여야 합니다(128과 191도 포함).
5 UTF-8 문자가 서로게이트로 예약되어 있습니다. 서로게이트 코드 포인트(U+D800 ~ U+DFFF)가 유효하지 않습니다.
8 바이트 시퀀스가 최대 UTF-8 코드 포인트를 초과합니다.
9 UTF-8 바이트 시퀀스에 일치하는 코드 포인트가 없습니다.