티스토리 뷰

til

TIL: MySQL의 Charset

주먹불끈 2024. 2. 28. 18:58

데이터베이스의 Charset 설정

데이터베이스의 Charset 설정은 데이터베이스가 문자 데이터를 어떻게 저장하고, 인코딩하며, 처리할 것인지를 결정한다. Charset은 특정 문자나 기호를 컴퓨터에서 사용할 수 있는 숫자 값으로 매핑하는 것이다. 데이터베이스에 다양한 언어의 데이터를 정확하게 저장하고 검색하는 데 관여하므로 중요한 설정이다.

중요 개념

  • Charset: 문자를 숫자로 매핑하는 규칙의 집합. 예) UTF-8, ISO-8859-1, ASCII 등
  • Collation: 문자열의 비교와 정렬을 결정하는 규칙이다. Charset에 따라 여러 Collation이 있을 수 있으며, 대소문자 구분, 악센트 구분(예를 들어, 'e'와 'é’) 등을 다룬다.

Chatset 설정이 중요한 이유

  • 호환성: 데이터베이스에 저장된 데이터가 다양한 클라이언트와 애플리케이션에서 올바르게 표시되도록 해준다.
  • 국제화: 전 세계 사용자들의 다양한 언어와 문자를 지원한다.
  • 데이터 무결성: 데이터가 정확하게 저장되고 검색되도록 하여 데이터 손실이나 변형을 방지한다.

계층별 설정 방법

세부 계층의 설정은 상위 설정을 덮어쓴다(overwrite)

  • 데이터베이스 생성 시: 생성 시점에 Charset과 Collation을 명시할 수 있다.
  • 테이블 레벨: 특정 테이블에 대해 Charset을 설정할 수 있다.
  • 컬럼 레벨: 개별 컬럼에 대해서도 Charset과 Collation을 설정할 수 있다.

일반적인 권장 사항

  • UTF-8 사용: UTF-8은 국제적으로 가장 널리 사용되는 인코딩 방식으로, 다양한 언어를 지원한다. 특히 UTF-8의 확장인 utf8mb4는 이모지를 포함한 모든 유니코드 문자를 지원합니다.
  • 애플리케이션 일관성: 데이터베이스, 애플리케이션 서버, 클라이언트 사이의 Charset을 일치시키는 것이 중요하다. 인코딩 문제를 방지하고 데이터 처리 과정을 간소화한다.

대표적 Charset

TL;DR - 특수한 경우가 아니라면 utf8mb4를 쓰자.

UTF-8 (utf8mb4)

  • 다양한 언어 지원: 거의 모든 언어의 문자를 지원하므로 국제화된 애플리케이션에 이상적이다.
  • 이모지 지원: utf8mb4는 MySQL에서 이모지를 포함한 모든 유니코드 문자를 지원한다. 참고로, MySQL에서 utf8은 UTF-8의 부분 집합으로, 4바이트 문자를 지원하지 않는다.
  • 권장 선택: 대부분의 새로운 개발 프로젝트에 권장되며, 특히 다국어를 지원해야 하는 경우에는 필수적이다.

Latin1 (latin1)

  • 서유럽 언어 지원: 서유럽 언어에 대한 지원이 필요할 때 적합하며, 영어와 대부분의 서유럽 언어에 대해 효율적인 저장을 제공한다.
  • 성능: latin1은 문자당 1바이트만 사용하기 때문에, UTF-8에 비해 저장 공간과 메모리 사용량이 적다. 데이터 크기가 큰 애플리케이션에서 성능상의 이점을 제공할 수 있다.

기타

utf8mb4 이란?

utf8mb4는 MySQL에서 사용되는 문자 집합(charset)으로, UTF-8의 전체 유니코드 문자 집합을 지원하는 확장 버전을 의미한다. “utf8"은 유니코드 인코딩 방식 중 하나인 UTF-8을 나타내며, "mb4"는 multi-byte 4를 의마한다. 최대 4바이트까지의 멀티바이트 문자를 지원한다는 것을 의미한다.

MySQL의 기본 Charset

MySQL 또는 다른 데이터베이스 시스템에서 charset을 명시적으로 지정하지 않으면, 서버 또는 데이터베이스 인스턴스의 기본 문자 집합이 사용된다. 이 기본값은 데이터베이스 시스템의 설정이나 버전에 따라 달라진다.

  • MySQL 5.5 이하: 기본 문자 집합은 latin1이다.
  • MySQL 5.5.3 이상: utf8mb4를 지원하기 시작했다. 일부 최신 버전의 MySQL과 MariaDB에서는 utf8mb4가 기본 문자 집합으로 설정되어 있다.
반응형

'til' 카테고리의 다른 글

TIL: ex, e.g., 그리고 i.e.  (0) 2024.03.31
TIL: o11y는 뭘까?  (0) 2024.03.20
TIL: Geo 데이터베이스와 힐베르트 곡선  (0) 2024.02.22
TIL: MySQL vs. PostgreSQL  (0) 2024.02.22
TIL: MHA - MySQL Master High Availability  (0) 2024.02.22
반응형
잡학툰 뱃지
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함