본문 바로가기
DBMS/PostgreSQL

character varying 컬럼 타입

by 드바 2022. 6. 17.
DBMS : PostgreSQL 11.11

 

- postgresql 의 character varying(n)의 숫자는 byte 가 아니라 글자 수 이다(오라클의 VARCHAR2(n CHAR) 과 동일)
- 일반적으로 byte라고 생각하기 쉬운데 글자 수 라는 것 조심(특히 캐릭터셋 변경 데이터 이관 시 컬럼 사이즈 조심)

 

PostgreSQL 캐릭터 타입

character type

https://www.postgresql.org/docs/11/datatype-character.html

 

8.3. Character Types

8.3. Character Types Table 8.4. Character Types Name Description character varying(n), varchar(n) variable-length with limit character(n), char(n) fixed-length, blank padded text variable unlimited …

www.postgresql.org

 

테스트

UTF-8 캐릭터 셋 DB에 vachar(3) 컬럼 타입 테이블 생성 후 데이터 insert

postgres=# select * from pg_database ;
  datname  | datdba | encoding | datcollate  |  datctype   | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid | datminmxid | dattablespace |               datacl                
-----------+--------+----------+-------------+-------------+---------------+--------------+--------------+---------------+--------------+------------+---------------+-------------------------------------
 postgres  |     10 |        6 | en_US.UTF-8 | en_US.UTF-8 | f             | t            |           -1 |         13877 |          561 |          1 |          1663 | 
 skdb      |  16384 |        6 | en_US.UTF-8 | en_US.UTF-8 | f             | t            |           -1 |         13877 |          561 |          1 |          1663 | 
 template1 |     10 |        6 | en_US.UTF-8 | en_US.UTF-8 | t             | t            |           -1 |         13877 |          561 |          1 |          1663 | {=c/postgres,postgres=CTc/postgres}
 template0 |     10 |        6 | en_US.UTF-8 | en_US.UTF-8 | t             | f            |           -1 |         13877 |          561 |          1 |          1663 | {=c/postgres,postgres=CTc/postgres}
(4 rows)

postgres=# select current_database() ;
 current_database 
------------------
 postgres
(1 row)

postgres=# 
postgres=# CREATE TABLE sk.tab1 (c1 varchar(3)) ;
CREATE TABLE
postgres=# 
postgres=# \d+ sk.tab1
                                            Table "sk.tab1"
 Column |         Type         | Collation | Nullable | Default | Storage  | Stats target | Description 
--------+----------------------+-----------+----------+---------+----------+--------------+-------------
 c1     | character varying(3) |           |          |         | extended |              | 

-- 영문 3글자 insert 성공
postgres=# insert into sk.tab1 values ('abc') ;
INSERT 0 1
-- 영문 4글자 insert 실패
postgres=# insert into sk.tab1 values('abdcd') ;
ERROR:  value too long for type character varying(3)
postgres=# select * from sk.tab1 ;
 c1  
-----
 abc
(1 row)

-- 한글 데이터 insert
postgres=# insert into sk.tab1 values('가') ;
INSERT 0 1
postgres=# insert into sk.tab1 values('가나') ;
INSERT 0 1
postgres=# insert into sk.tab1 values('가나다') ;
INSERT 0 1
-- 한글 4글자 insert 실패
postgres=# insert into sk.tab1 values('가나다라') ;
ERROR:  value too long for type character varying(3)
postgres=# select * from sk.tab1 ;
   c1   
--------
 abc
 가
 가나
 가나다
(4 rows)

댓글