DBMS : PostgreSQL 11.11 |
- postgresql 의 character varying(n)의 숫자는 byte 가 아니라 글자 수 이다(오라클의 VARCHAR2(n CHAR) 과 동일)
- 일반적으로 byte라고 생각하기 쉬운데 글자 수 라는 것 조심(특히 캐릭터셋 변경 데이터 이관 시 컬럼 사이즈 조심)
PostgreSQL 캐릭터 타입
https://www.postgresql.org/docs/11/datatype-character.html
테스트
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)
'DBMS > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] timescaledb extension 설치 (0) | 2023.11.15 |
---|---|
PostgreSQL 외부 접속 허용 설정 (0) | 2023.11.08 |
[PostgreSQL] 백업/복구(pg_dump, pg_restore) (0) | 2023.02.02 |
vacuum / vacuum full 의 차이 (0) | 2022.06.21 |
foreign table(oracle link) 조회 시 OCIEnvCreate failed 에러 발생 (0) | 2022.03.20 |
댓글