티스토리 뷰
PostgreSQL에서 흔히 사용하는 데이터 타입인 VARCHAR(n)은 일반적으로 "최대 문자 수"로 인식된다. 즉, VARCHAR(10)이라면 최대 10개의 문자를 저장할 수 있다. 여기서 주의할 점은, 이는 바이트(byte) 수가 아니라 문자(character) 수를 기준으로 한다는 것이다.
PostgreSQL의 기본 인코딩은 UTF-8이며, 이는 한 문자가 여러 바이트로 구성될 수 있는 멀티바이트(multi-byte) 인코딩이다.
예를 들어, 한글은 일반적으로 한 글자당 3바이트로 구성된다. 따라서 VARCHAR(10)으로 선언된 컬럼에 한글 10자를 저장하면 실제로는 최대 30바이트를 차지하게 된다.
Oracle과는 조금 다르다. Oracle의 경우 VARCHAR2(10 BYTE)와 같이 바이트 단위로 최대 길이를 관리하는 옵션을 제공하지만, PostgreSQL은 기본적으로 문자의 개수만 관리한다. 이 차이점으로 인해 실제 데이터 저장 시 예상하지 못한 바이트 수 차이가 발생할 수 있다.
PostgreSQL 공식 문서에도 다음과 같은 내용이 있다.
“데이터베이스 인코딩을 변경하면, 각 문자에 할당되는 바이트 수가 달라지므로, VARCHAR의 최대 길이 계산도 바뀐다.”
— PostgreSQL Documentation, Character Types
결국, PostgreSQL에서 테이블 설계 시 VARCHAR(n)을 사용할 때는 데이터베이스의 인코딩 방식을 고려해야 한다. 특히 UTF-8과 같은 멀티바이트 환경에서는 문자 개수와 실제 바이트 수 사이의 차이를 명확히 이해하고, 데이터 길이를 설계할 때 충분히 주의할 필요가 있다.
핵심 정리
- PostgreSQL의 VARCHAR(n)에서 n은 문자 수를 기준으로 한다.
- UTF-8 인코딩 환경에서는 실제 저장되는 바이트 수가 문자당 최대 4바이트(일반적인 한글은 3바이트)가 될 수 있다.
- 따라서 멀티바이트 환경에서는 저장할 데이터의 문자 종류와 길이를 정확히 고려하여 컬럼 크기를 결정해야 한다.
- Total
- Today
- Yesterday
- 백준2720번 #그리디 알고리즘
- object 클래스 # java
- heap area #stack area #static area #jvm
- 12605번
- 정보처리기사 실기 #정처기 실기 #2024년 2회 #정처기 2024년 2회 #공부법 # 꿀팁
- 반복문
- 브루트 포스법
- 나는야 4학년 #5학년 까지 가보자구
- level3
- 스프링웹개발기초
- 백준 18258번
- 올 겨울은 조금 따뜻할 것 같다.
- level2
- java #예외처리 #throw #throws
- 백준10871번
- 단계10
- 자바 #자바문법 #자바기초 #참조형 #기본형
- Spring
- 25083번
- java #추상클래스
- 25304번
- 백준17608번
- level1 # 입출력과 사칙연산
- 11034번
- 백준 10828번 # 스택
- 백준14720 # 그리디 알고리즘 # greedy
- 2798블랙잭
- 이분탐색
- static #자바 메모리 구조 #멤버 변수
- 명품 JAVA Programming - 황기태
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |