얼마 전 , 비교적 최근 업무시간에 UTF8와 AL32UTF8에 대한 이야기가 나온적이 있다. 그냥 UTF8 종류 중 한개겠지라고 생각하고 넘기려다가 UTF8과 차이점이 무엇인지 비교되는 정보가 별로 없어서 간단하게 정리해본다.
UTF8은 3byte 기준으로 문자열을 저장할 수 있다. 그 범위는 U+9999까지인데 AL32UTF8은 그 외 보충 문자열(Supplementary characters, 보조 문자) 는 U+ 10000에서 U+ 10FFFF까지 코드 포인트가 할당 된 문자까지 저장할 수 있는 타입이라고 생각하면 된다. 즉, U + FFFF( 3byte 표현) 보다 큰 유니 코드 문자다. 조금 유식하게 Compatibility Encoding Scheme for UTF-16: 8-Bit (CESU-8):라고 표현할 수 있다.
이런 AL32UTF8에 저장할 수 있는 4byte 문자에는 대표적으로 한자와 이모지가 있다.
U + 2070E : 𠜎
U+1F601 : 😁
이런 것들을 저장하기 위해서 오라클에서는 AL32UTF8을 사용해야 하는 것이다.
오라클 DBMS 측면에서 보면 이런 UTF8 vs AL32UTF8 비교시트를 만들수 있겠다.
UTF8 vs AL32UTF8
UTF8 | AL32UTF8 | |
UNICODE Version | 2.1 ~ 3.0 | 3.0~3.1 |
Oracle Version | 8.0 ~ 9l | >= 9i |
Unicode Encoding | UTF8 | UTF8 |
보충, 보조 문자열 (Supplementary characters) 지원 |
X | O |
oracle 8i 이하 client 지원 | O | X |
가변넓이 | 1~3byte | 1~4byte |
특이사항.
* UTF8 -> AL32UTF8 Datadump로 이관 시 에러 발생, Export/Import 사용 필요
AL32UTF8를 이용할 때 이런 보충, 보조문자열을 지원하는지 테스트 하는 것이 중요하다. 사실 사용자 입력을 통하게 되는 문자열 셋에만 거의 한자 내지 이모지, 특수문자의 4byte 유니코드 문자열이 필요할 터인데
- 실제 DB를 이용하는 어플리케이션( 프로그램/시스템 ) 에 문제가 없는지 확인이 필요하다.
참고로 mysql, mariadb에서 이런 문자셋을 utf8, utf8mb4라고 표현한다.
'dev' 카테고리의 다른 글
깃허브 액션(github action) 에서 젠킨스로 갈아탄 이유 (1) | 2021.04.26 |
---|---|
vue.js vuetify data-table style overflow hidden not working (0) | 2021.04.23 |
깃허브에 프로젝트 올리는 방법 (0) | 2021.04.06 |
UUID(범용 고유 식별자)와 RFC4122 (1) | 2021.03.26 |
mariadb date, datetime 타입 default 현재 시간(curdate, current_timestamp, current_datetime) 설정 에러 (1) | 2021.01.17 |
자바스크립트 크롬의 불안정한 배열 정렬 문제 - Javascript chrome-v8 Unstable sorting problem (4) | 2020.11.26 |
이클립스 F3 Problems opening an editor - MALFORMED 해결 (0) | 2020.10.12 |
DLP, NDLP, EDLP, CDLP 정리 (0) | 2020.09.26 |