database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 10247 게시물 읽기
No. 10247
데이터 타입 문의
작성자
김성수(autohead)
작성일
2021-04-27 19:44
조회수
2,074

1)

Drga varchar(12) null default ''::character varying


::character varying 의미가 뭔지요?


2)

abc character varying(8) not null


character varying(8) = varchar(8) 같은 건지요?

이 글에 대한 댓글이 총 6건 있습니다.

문서를 보면 character varying은 varchar와 같습니다.

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


콜론 두개(::)는 형변환을 의미합니다. 따라서 varchar로의 형변환이고 character varying 과 같이 자리수를 정하지 않으면 길이제한이 매우 길어집니다.

정상규(pajama)님이 2021-04-27 22:12에 작성한 댓글입니다.

Varchar(12) 에서 varchar 무제한 즉 text로 형변환 된건가요?


character varying   = text   입니까?

숫자가 없으면 텍스트와 같은건지요?

아님 제한이 있는건지요?

 

김성수(autohead)님이 2021-04-28 06:51에 작성한 댓글입니다.
이 댓글은 2021-04-28 06:53에 마지막으로 수정되었습니다.

링크의 문서에 아래와 같은 문장이 있는거 봐선 text와 동일하다는 의미같기도 합니다.

 If character varying is used without length specifier, the type accepts strings of any size.

In addition, PostgreSQL provides the text type, which stores strings of any length. Although the type text is not in the SQL standard, several other SQL database management systems have it as well.

정상규(pajama)님이 2021-04-28 08:58에 작성한 댓글입니다.
이 댓글은 2021-04-28 09:05에 마지막으로 수정되었습니다.

postgresql 에서 기본은 최대 10Mb ( 10485760 = 1024*1024*10 ) 로 알고 있습니다.

Create table test ( col1 varchar(10485761) );
=> ERROR :  Length for type varchar cannot exceed 10485760

딥사랑(딥사랑)님이 2021-04-28 13:31에 작성한 댓글입니다.

1. '' (빈문자열)값은 어떤 상황에서 그 형을 결정하지 못한다면, 아래와 같이, unknown 자료형이 됩니다. 

> select pg_typeof('');

 pg_typeof 

-----------

 unknown

그래서, 사용자가 임의로 자료형을 지정해서 자료형 변환을 해야하는 경우가 있습니다. 

create table 에서 

사용자가, 

drga varchar(12) default ''

이런형태로 테이블을 만들면, 

내부적으로 

drga varchar(12) null default ''::varchar

로 '' 문자열을 미리 그 칼럼의 자료형인 varchar 로 바꾸어 처리합니다. 

character varying 형은 varchar 형의 별칭입니다. 

표준 이름이 character varying 이고, 내부적으로(관습적으로) varchar를 써서 아직까지 두 이름의 자료형이 같이 쓰이고 있습니다. 


2.

varchar(길이제한값) 자료형은 text 자료형인데, 그 문자열의 길이가 적당한지 확인하는 작업이 더 있는 자료형입니다. 

그 길이 제한 값을 지정하지 않았다 하더라도 text 자료형과 달리 일단은 문자열 길이를 확인 하는 작업을 합니다. 

이 차이 외에는 varchar와 text는 저장 방식, 처리 방식, 연산 방식, 색인 접근 방식 모두 동일합니다. 


길이 제한을 하지 않는 경우, 포스트그레스큐엘은 거의 1GB까지 한 칼럼에 담을 수 있습니다. 

그래서, 응용프로그램에서 처리하는 자료의 문자열 길이를 확인하지 않는 경우,

너무 긴 문자열이 저장되어 서비스 전체 품질을 떨어뜨리는 일이 종종 발생합니다. 

자료 품질을 관리하는 시각에서는 text 자료형은 아주 위험한 자료형이기도 합니다. 

 

김상기(ioseph)님이 2021-04-28 13:38에 작성한 댓글입니다.

아, 그렇네요.
varchar 컬럼에 full-text 수준의 내용을 넣어본적은 없어서 당연히 제한에 걸리고, 1Gb 까지는 설정으로 늘린다고 생각했었는데,  limit 없이 넣으니까 몇 십메가 이상도 들어가네요.

정확하게 알려주셔서 감사합니다.

딥사랑(딥사랑)님이 2021-04-28 14:36에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
10251Postgres11 이중화 솔루션 채택 문의 [3]
김성아
2021-05-20
2210
10249exception 예외처리 문의 [1]
돌멩이
2021-05-10
1853
10248pk 생성시 함수?사용 [2]
TEST
2021-05-07
1613
10247데이터 타입 문의 [6]
김성수
2021-04-27
2074
10246아카이브 wal파일 질문드립니다. [1]
초보자
2021-04-26
1743
10245특정 데이터별 상위 데이터 구하기 [1]
초보
2021-04-20
1574
10244SQLSTATE[08006] [7] timeout expired? [2]
박병호
2021-04-19
1993
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.048초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다