티스토리 뷰
데이터베이스의 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
TAG
- github
- 2023
- 독서후기
- notion
- agile
- 독서
- Shortcut
- strange
- websocket
- intellij
- folklore
- OpenAI
- 체호프
- 잡학툰
- golang
- 제이펍
- Gin
- ChatGPT
- bun
- 클린 애자일
- postgres
- 노션
- 인텔리제이
- 영화
- API
- Bug
- JIRA
- pool
- solid
- go
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함