원인
1. 데이터베이스와 세션의 인코딩이 맞지 않은 경우에 발생합니다.
2. 데이터가 깨진 경우에 발생합니다.
해결방안
1. 데이터베이스와 세션의 인코딩이 맞지 않은 경우에 발생합니다.
-> 세션의 인코딩을 데이터베이스에 맞게 변경한 뒤 조회합니다.
변경방법은 $HOME/.odbc.ini 의 파일의 CHARSET 의 변수를 데이터베이스의 인코딩에 맞게 변경합니다.
* 데이터베이스 인코딩 조회
gSQL> SELECT CHARACTER_SET_NAME FROM CATALOG_NAME; CHARACTER_SET_NAME ------------------ UTF8
* 세션의 인코딩이 UHC ( euc ) 인 경우
gSQL> SELECT CLIENT_CHARSET FROM V$SESSION_CONNECT_INFO WHERE SESSION_ID = SESSION_ID(); CLIENT_CHARSET -------------- UHC gSQL> CREATE TABLE TEST1 (C1 CHAR(10)); Table created. gSQL> INSERT INTO TEST1 VALUES ('테스트'); ERR-22021(12121): invalid character value in characterset repertoire
* 세션의 인코딩이 UTF8 인 경우
gSQL> SELECT CLIENT_CHARSET FROM V$SESSION_CONNECT_INFO WHERE SESSION_ID = SESSION_ID(); CLIENT_CHARSET -------------- UTF8 1 row selected. gSQL> INSERT INTO TEST1 VALUES ('테스트'); 1 row created. gSQL> SELECT * FROM TEST1; C1 ------- 테스트
2. 데이터가 깨진 경우에 발생합니다.
-> 깨진 데이터를 제거한 뒤, 다시 적재합니다. ( 이것밖에 답이 없으려나? ㅠㅠ ) 고민한 뒤에 방법을 찾으면 수정할게요.
gSQL> INSERT INTO TEST1 VALUES ('í ì¤í¸ 2 '); 1 row created. gSQL> SELECT * FROM TEST1; ERR-22021(12121): invalid character value in characterset repertoire gSQL> SELECT DUMP(C1) FROM TEST1; DUMP(C1) ------------------------------------------------------------- Type=CHAR Len=10 : Str=237,133,140,236,138,164,237,138,184,32 - 정상 Type=CHAR Len=10 : Str=237,10,236,164,237,184,32,32,32,32 - 깨진 데이터 2 rows selected.
'Database > Goldilocks' 카테고리의 다른 글
ERR-HY000(11067): failed to connect to an host with a socket : connect() : stnConnect() returned errno(113) (0) | 2018.01.19 |
---|---|
ERR-HYT00(14026): resource busy or timeout expired (0) | 2018.01.19 |
[GOLDILOCKS] PHP 연동하기 (0) | 2017.09.13 |
[GOLDILOCKS] unixODBC 연동하기 (0) | 2017.09.12 |
[GOLDILOCKS] SqlDbx 연동하기 (0) | 2017.09.11 |