2021-03-03 01:03
얼마 전 , 비교적 최근 업무시간에 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 | 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 유니코드 문자열이 필요할 터인데
참고로 mysql, mariadb에서 이런 문자셋을 utf8, utf8mb4라고 표현한다.