etc.
[문자열] 인코딩, Char set, ASCII, 유니코드, UTF-8
인쥭
2021. 12. 16. 16:24
반응형
인코딩 / 디코딩
- 문자, 기호 <-> 컴퓨터가 이해할 수 있는 값으로 변환하는 과정을 통칭.
- 인코딩: 문자를 0, 1로 변환
- 디코딩: 0, 1로 작성된 값을 문자로 변경
- 이러한 변환 과정은 미리 정해진 기준(= Character Set)을 바탕으로 수행되어야 의미가 있음.
Character set
- 어떤 문자들이 컴퓨터에 저장될 때 어떤 코드로 저장될지 규칙을 정의한 집합이라고 함.
- 아래에 작성할 ASCII, UTF-8 또한 '어떤 문자들이' '어떤 코드로 저장될지(= 인코딩 방식)를 정의하므로 Char set에 포함된다.
- ASCII: '영어'를 '1byte 코드로' 저장
- UTF-8: '모든 문자열을 대표하는 유니코드'를 '1 ~ 4 byte 가변 길이 코드로' 저장
- 여기에 설명이 잘 나와 있다!!!
ASCII
- 7비트 인코딩 방식을 사용하는 문자 인코딩 방식 (또는 Char set) (1비트는 에러 검출용)
- UTF-8의 경우 ASCII와 호환 성을 염두에 둔 영역 설계가 되어 있다.
- ASCII로 작성한 문서는 UTF-8을 적용할 수 있지만, UTF-8로 작성한 문서는 ASCII로는 한정적인 경우에만 확인이 가능할 것
유니코드
- 영문에 최적화되어 있던 ASCII와 달리 전 세계의 모든 문자를 다룰 수 있도록 설계된 산업 표준이다.
UTF-8
- 유니코드를 위한 문자 인코딩 방식(또는 Char set)이며, 한 문자를 나타내기 위해 1 ~ 4바이트를 가변 길이로 사용한다.
- 이 때, 1바이트 영역이 ASCII와 호환된다.
- 때문에 모든 문자를 표현할 수 있지만, 인코딩 된 결과물은 원본보다 더 큰 크기를 가질 수 있다.
참고. DB의 collation
- DB에서 검색 등의 작업을 위해 문자로 저장된 값들을 비교할 때, 정렬할 때 사용하는 규칙의 집합이다.
- CHAR, VARCHAR, TEXT와 같은 데이터 타입의 컬럼에만 적용된다.
- 대소문자를 구별하는 binary 방식과 구별하지 않는 case insensitive(_ci)로 나뉜다.
- mysql의 경우, UTF-8이 3바이트 영역까지만 사용하던 것을 근거로 utf8 char set을 3바이트 기반으로 설계하였다.
- 그러나 emoji 등 신규 추가된 4바이트 문자열에 대응하기 어려운 한계점이 있었고, 이를 대응하기 위해 utf8mb4 char set을 추가하였다고 한다. 또한 호환성 유지를 위해 기존 utf8 시스템을 utf8mb4로로 바꾸어도 값의 손실이 없다고 한다.
- mb는 multi bytes의 약자인 듯 하다.
- 자세한 것은 여기에 잘 나와 있다!
- 그러나 emoji 등 신규 추가된 4바이트 문자열에 대응하기 어려운 한계점이 있었고, 이를 대응하기 위해 utf8mb4 char set을 추가하였다고 한다. 또한 호환성 유지를 위해 기존 utf8 시스템을 utf8mb4로로 바꾸어도 값의 손실이 없다고 한다.