캐릭터셋(Character Set)에 대해 우리는 일반적으로 신경을 쓰지 않습니다. 그런데 이행(migration)과 같은 작업을 하게 되면 불거지게 되는 문제입니다. 캐릭터 셋이 맞지 않아 한글이 깨지거나 이상한 문자로 표시되는 일이 발생하죠. 이번 글에서는 캐릭터 셋에 대해 알아보도록 하겠습니다.
Oracle, MySQL 캐릭터셋 확인 방법
1. 오라클 캐릭터셋 확인 및 종류
Oracle에서 아래 명령어를 통해 설정된 캐릭터 셋을 알 수 있습니다.
SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET' ; |
- KO16KSC5601 : 완성형 한글 문자셋으로 일반적으로 많이 사용됩니다. 2,350자의 한글, 4,888자의 한자, 히라카나, 카타카나, 영문 및 각종 기호를 포함하며 2 bytes를 사용합니다.
- KO16MSWIN949 : 조합형 한글 문제셋입니다. 완성형을 포함하며 11,172자의 한글을 표현할 수있고 역시 2 bytes를 사용합니다.
- AL32UTF8 : Unicode의 CES 중 하나입니다. 11,172자의 한글을 지원하며 3 bytes를 사용합니다.
2. MySQL 캐릭터 셋 확인 및 종류
MySQL에서 아래 명령어를 통해 설정된 캐릭터 셋을 알 수 있습니다.
SELECT SCHEMA_NAME , DEFAULT_CHARACTER_SET_NAME , DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA ; |
MySQL에서는 ASCII, EUC-KR, UTF-8의 캐릭터 셋을 주로 사용합니다.
왜 Character Set이 필요할까요? 그 발전 과정
숫자는 모두 동일하게 1,2,3… 사용하지만 문자는 한국어, 영어, 중국어 다 다릅니다. 그래서 문자는 인코딩 방식이 달라지게 됐죠. 인코딩이라는 말에서 알 수 있듯이 문자를 효율적으로 저장하는 방식을 입니다.
초기에는 ASCII를 사용했습니다. 메모리와 저장공간이 제한적이었기 때문에 효율적 표현이 중요했죠. 시간이 지나면서 하드웨어가 좋아지고 서유럽 국가들의 다양한 언어를 표현하기 위해 ANSI 인코딩을 사용하기 시작했습니다.
하지만 비영어권 국가들도 자국의 언어를 표현하기 위해 인코딩이 필요했습니다. 한글을 표현하기 위해 EUC-KR과 같은 지역 특화된 인코딩 방식이 등장하기 시작했습니다.
결국 인터넷과 글로벌화가 진행되면서 하나의 인코딩으로 전 세계 모든 언어를 표현이 필요했습니다. 이를 해결하기 위해 ‘유니코드’가 개발되었습니다. Character Set에 Unicode 가 붙은 것은 이런 의미입니다.
유니코드 기반인 UTF-8 인코딩 방식이 개발되었고, 널리 사용되어 웹과 같은 국제적인 표준으로 사용되고 있습니다.
Character Set의 구분
Character Set은 ‘고정길이’냐 ‘가변길이’냐에 따라 아래와 같은 특징이 있습니다. 위에서 Character Set의 발전과정과 연관해서 생각해 보면 당연한 이치입니다.
구분 | 고정길이 | 가변길이 |
Character Set | ASCII | UTF-8 |
장점 | 인코딩이 단순해 처리 속도가 빠름 | 다양한 문자 집합을 효율적으로 지원 |
단점 | 다른 언어를 지원하기 어려움 | 인코딩 속도는 상대적으로 느림 |
Character Set의 비교 분석
문자 인코딩은 텍스트 데이터를 컴퓨터에서 처리할 수 있는 형식으로 변환하는 방법을 정의합니다. `UTF-8`, `EUC-KR`, `ASCII`, `ANSI`는 각각 다른 인코딩 방식으로, 각 방식은 다양한 문자와 심벌을 다루는 방법이 다릅니다. 아래 표와 같이 요약할 수 있습니다.
특성 | ASCII | ANSI | EUC-KR | UTF-8 |
문자 집합 | 기본 영어 문자 | 확장된 서유럽 문자 | 한국어 문자 | 전 세계 모든 문자 |
바이트 수 | 1바이트 | 1바이트 | 1~2바이트 | 1~4바이트 |
사용 용도 | 기본 영어 텍스트 | 서유럽 텍스트 | 한국어 텍스트 | 국제화된 텍스트 |
호환성 | 제한적 | 제한적 | 제한적 | 광범위한 호환성 |
1. ASCII (American Standard Code for Information Interchange)
ASCII는 가장 기본적인 문자 인코딩 방식으로, 영어 알파벳, 숫자, 기본적인 구두점 및 제어 문자를 포함하여 총 128개의 문자 집합을 사용합니다.
- 문자 범위 : 0 ~ 127
- 바이트 수 : 각 문자는 1바이트 (8비트)로 표현됩니다.
- 용도 : 주로 영어 텍스트를 처리하는 데 사용됩니다. 제한된 문자 집합으로 인해 비영어권 언어를 포함하는 경우에는 사용이 어렵습니다.
2. ANSI (American National Standards Institute)
ANSI는 Windows 운영 체제에서 사용되는 확장 문자 집합을 의미합니다. 엄밀히 말하면 "ANSI"라는 인코딩은 없으며, 실제로는 코드 페이지 (예: Windows-1252)를 의미합니다.
- 문자 범위: 기본 ASCII 문자에 더해 128~255 범위의 추가 문자 (특수 기호 및 일부 국제 문자) 포함.
- 바이트 수: 각 문자는 1바이트로 표현됩니다.
- 용도: 주로 서유럽 언어 및 일부 특수 기호를 처리하는 데 사용됩니다.
3. EUC-KR (Extended Unix Code for Korean)
한국어를 인코딩하기 위한 문자 집합입니다. KS X 1001 (KSC 5601) 표준을 기반으로 하며, 한글 완성형 문자를 지원합니다.
- 문자 범위: ASCII 문자 (1바이트)와 한국어 문자 (2바이트)를 포함.
- 바이트 수: 한국어 문자는 2바이트, 기본 ASCII 문자는 1바이트.
- 용도: 주로 한국어 텍스트를 처리하는 데 사용됩니다.
4. UTF-8 (Unicode Transformation Format - 8-bit)
유니코드 문자 집합을 변환하기 위한 가변 길이 인코딩 방식입니다. 전 세계 모든 문자를 표현할 수 있으며, ASCII 문자와의 호환성을 유지합니다.
- 문자 범위: 1 ~ 4바이트로 다양한 유니코드 문자 지원.
- 바이트 수: ASCII 문자는 1바이트, 그 외 문자는 2~4바이트.
- 용도: 국제화된 텍스트 처리에 널리 사용됩니다. 전 세계 거의 모든 문자를 포함할 수 있어, 웹과 같은 다양한 플랫폼에서 표준으로 사용됩니다.
마치며
각 인코딩 방식은 특정 사용 사례에 적합하게 개발됐습니다. 사용 목적에 따라 적절한 인코딩 방식을 선택하는 것이 중요합니다. UTF-8은 그 범용성과 광범위한 문자 지원으로 인해 가장 많이 사용되는 인코딩 방식입니다.
'데이터베이스' 카테고리의 다른 글
MySQL의 S-Lock, X-Lock 그리고 트렌잭션 격리수준까지 알아보자 (0) | 2024.07.31 |
---|---|
MySQL 느린(Slow) 쿼리를 찾아내는 방법 (0) | 2024.07.29 |
Sqlplus spool 명령어, set 설정으로 csv 데이터 추출 방법 (0) | 2024.07.19 |
알티베이스(Altibase) 특징 및 DBeaver 접속 방법 (0) | 2024.07.16 |
Oracle을 MySQL로 변환할 때 고려해야 할 3가지 오류 (0) | 2024.07.11 |