db/PostgreSQL

[PostgreSQL] Character Types

잘할수있을거야 2022. 9. 1. 11:06

char(n) // = character(n)
varchar(n) // = character varying(n)
//n은 양의 정수
//최대 n개의 문자(바이트x)저장
//n개의 문자 초과시 에러

text

  • CHAR(n) (=CHARACTER(n))

내부적으로 저장될 때는  space로 패딩되어 n바이트로 채워진다.

n지정 안된 경우 -> n은1로 취급

 

마지막 문자 이후의 공백들은 모두 버려진다.

CREATE TABLE char_test (id SERIAL PRIMARY KEY, col CHAR(4));
INSERT INTO char_test(col) VALUES('가나다라 '),('가나다라  '),('가나다라   '),('가나다라     ');
SELECT id, col, LENGTH(col) AS '길이' FROM char_test;

 

맨 앞 문자 이전의 공백들은 데이터로 포함됨

INSERT INTO char_test(col) VALUES('1'),(' 1'),('  1'),('   1');
SELECT id, col, LENGTH(col) AS 길이 FROM char_test;

 

양 끝의 앞 뒤에 공백이 섞인 경우 다음과 같음( 뒤 공백은 trim되어 포함x)

INSERT INTO char_test(col) VALUES(' 234   ');
SELECT id, col, LENGTH(col) AS 길이 FROM char_test;

 

PostgreSQL에서 char_length(character_length)와 length 함수 둘다 문자개수 리턴

MySQL에서 char_length함수는 문자개수, length함수는 바이트개수 리턴


  • VARCHAR(n) (= CHARACTER VARYING(n))

 

내부적으로는 space 패딩 없이 그대로 저장된다.

n지정 안된 경우 -> 어떠한 길이의 문자도 저장 가능

 

char와 다르게 맨 앞 문자 이전의 공백, 맨 뒷 문자 이후의 공백들은 데이터도 포함된다.

CREATE TABLE varchar_test(id SERIAL PRIMARY KEY, col VARCHAR(10));
INSERT INTO varchar_test(col) VALUES('1'),(' 1'),('1 '),(' 1 ');
SELECT id, col, LENGTH(col) AS 길이 FROM varchar_test;
DROP TABLE varchar_test;


  • TEXT

어떠한 길이의 문자도 저장 가능.