1)
Drga varchar(12) null default ''::character varying
::character varying 의미가 뭔지요?
2)
abc character varying(8) not null
character varying(8) = varchar(8) 같은 건지요?
문서를 보면 character varying은 varchar와 같습니다.
https://www.postgresql.org/docs/9.6/datatype-character.html
콜론 두개(::)는 형변환을 의미합니다. 따라서 varchar로의 형변환이고 character varying 과 같이 자리수를 정하지 않으면 길이제한이 매우 길어집니다.
Varchar(12) 에서 varchar 무제한 즉 text로 형변환 된건가요?
character varying = text 입니까?
숫자가 없으면 텍스트와 같은건지요?
아님 제한이 있는건지요?
링크의 문서에 아래와 같은 문장이 있는거 봐선 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.
postgresql 에서 기본은 최대 10Mb ( 10485760 = 1024*1024*10 ) 로 알고 있습니다. Create table test ( col1 varchar(10485761) ); => ERROR : Length for type varchar cannot exceed 10485760
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 자료형은 아주 위험한 자료형이기도 합니다.
아, 그렇네요. varchar 컬럼에 full-text 수준의 내용을 넣어본적은 없어서 당연히 제한에 걸리고, 1Gb 까지는 설정으로 늘린다고 생각했었는데, limit 없이 넣으니까 몇 십메가 이상도 들어가네요.
정확하게 알려주셔서 감사합니다.