원인
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 |