DB/PostgreSQL

[PostgreSQL] PostgreSQL의 문자 타입에 대해서 알아보자. (Character Types)

빙기때침식곡 2022. 6. 14. 01:12
반응형

1. character varying(n), varchar(n)

 - 제한이 있는 가변길이 (최대 길이 n 까지)

 - varchar(10)에 'abc'가 들어가면 3바이트의 크기를 가짐

 - 길이 지정을 하지 않으면 (n을 명시하지 않으면) 문자 길이 제한 없음으로 간주

 

 

2. character(n), char(n)

 - 고정 길이, 후행 공백 제거

 - char(10)에 'abc'가 들어가도 10바이트의 크기를 가짐

 - 길이 지정 안하면 character(1)로 간주

 

 

3. text

 - 제한없이 가변 길이

 

 

char는 추가 스토리지 비용(+ 후행공백처리 등)으로 3개 중 가장 느리다.

길이가 고정인 주민등록번호와 같은 경우가 아니라면

일반적으로 text나 varchar를 사용한다.

 

 

** varchar에서 n을 명시하지 않으면 길이 제한이 없다고 했는데 그러면 text랑 다른게 없나?

 

아니다.

varchar, char는 db엔진에 올라가는 반면에 text는 하드에 데이터를 저장한다.

그래서 varchar, char는 데이터에 대한 링크를 가지고 있기 때문에 인덱스가 가능한 반면

text는 그렇지 않기 때문에 인덱스가 불가능 하다.

상황에 따라서 잘 쓰도록 하자.

 

 

 

예시1. a의 길이는 2지만 크기는 4이다.

CREATE TABLE test1 (a character(4)); 
INSERT INTO test1 VALUES ('ok'); 
SELECT a, char_length(a) FROM test1; -- (1)

 

a      | char_length
------+-------------
ok    |             2

 

 

 

예시2. varchar는 길이가 넘어선 문자열은 에러를 발생한다.

CREATE TABLE test2 (b varchar(5)); 
INSERT INTO test2 VALUES ('ok'); 
INSERT INTO test2 VALUES ('good '); 
INSERT INTO test2 VALUES ('too long');

ERROR: value too long for type character varying(5)

 

 

 

예시3. 문자열을 varchar로 캐스팅하면 길이만큼 문자열이 잘린다.

INSERT INTO test2 VALUES ('too long'::varchar(5)); -명시적 잘림 
SELECT b, char_length(b) FROM test2;

 b      | char_length
-------+-------------
ok     |     2
good |     5
too l  |     5

 

 

예시4. char는 후행공백을 제거한다.

CREATE TABLE strtest (str1 varchar(10), str2 char(10));
INSERT INTO strtest VALUES('kuma', 'kuma');
INSERT INTO strtest VALUES('  kuma  ', '  kuma  ');
SELECT str1, char_length(str1), str2, char_length(str2) FROM strtest;

   str1   | char_length |    str2    | char_length
----------+-------------+------------+-------------
kuma     |           4 | kuma       |           4
  kuma   |           8 |   kuma     |           6

 

 

 

 

 

REFERENCES

 

PostgreSQL : Documentation: 13: PostgreSQL 13.7 Documentation

 

postgrespro.com

 

반응형