반응형
프로젝트에서 사용하는 DB는 오라클12C 이며, 캐릭터셋은 AL32UTF8로 한글이 3byte이다.
-- 오라클 캐릭터셋 확인 쿼리
select * from nls_database_parameters where parameter = 'NLS_CHARACTERSET';
타 시스템으로 데이터 전송 중 자릿수 초과 오류가 발생하였다.
협의 당시 특정 컬럼의 자릿수는 varchar 10 이였는데, 프로젝트에서 사용하는 varchar 10 은 10 char를 의미했었고, 다른 시스템에서는 10 byte였으며, 타 시스템의 캐릭터 셋은 "KO16MSWIN949"로 한글이 2byte였다.
* KO16KSC5601
완성형 한글- 일반적으로 많이 사용되며 2350자의 한글, 4888자의 한자, 히라카나, 카타카나, 영문 및 각종 기호를 포함하고 있음. (한글바이트: 2byte)
* KO16MSWIN949
조합형 한글- 완성형을 포함하여 11172자의 한글을 표현함 (한글바이트: 2byte)
* AL32UTF8
Unicode의 CES 중 하나- 11172자의 한글을 지원 (한글바이트: 3byte)
CONVERT함수로 캐릭터셋을 변경하고 LENGTHB로 자릿수를 체크한 후
10 byte보다 클 경우 큰 많큼 SUBSTR 함수로 짤라서 전송 하였다.
select
case when lengthb(convert('한글가나다라1234', 'KO16MSWIN949')) > 10
then substr('한글가나다라1234',0, length('한글가나다라1234') - (lengthb(convert('한글가나다라1234', 'KO16MSWIN949'))-10) )
else '한글가나다라1234'
end
from dual;
반응형
'개발 > database' 카테고리의 다른 글
[mssql] 테이블 목록 조회 (0) | 2021.01.17 |
---|---|
oracle -> mssql 변경 (0) | 2021.01.17 |
[mssql] 오라클 사용자를 위한 MSSQL 함수 (0) | 2021.01.17 |
[oracle] 오라클 플래시백 쿼리 flashback query AS OF TIMESTAMP (0) | 2021.01.17 |
[oracle] 오라클 plsql loop sample (0) | 2021.01.17 |
댓글