나는 a_horse_with_no_name이 말한 모든 것에 동의하며 일반적으로 Erwin의 의견 조언에 동의합니다.
아니요, char는 열등합니다 (구식입니다). text와 varchar는 (거의) 동일하게 수행합니다.
메타 데이터
하나 개의 작은 예외로, 단지 시간 I 사용은 char()
내가 메타 데이터가이 말을 할 때입니다 MUST가 되세요 되세요 X-문자. char()
입력이 한도를 초과하는 경우에만 불만 이 있음을 알고 있지만 CHECK
제약 조건의 언더런을 자주 방지 합니다. 예를 들어
CREATE TABLE foo (
x char(10) CHECK ( length(x) = 10 )
);
INSERT INTO foo VALUES (repeat('x', 9));
몇 가지 이유로이 작업을 수행합니다.
char(x)
때로는 스키마 로더가 고정 너비 열인 것으로 추론됩니다. 이는 고정 폭 문자열에 최적화 된 언어에서 차이를 만들 수 있습니다.
- 이해하기 쉽고 쉽게 적용 할 수있는 규칙을 설정합니다. 이 컨벤션에서 코드를 생성하는 언어로 스키마 로더를 작성할 수 있습니다.
내가 이것을 할 수있는 곳의 예가 필요합니다.
- 두 글자 상태 약어는이 목록을 열거 할 수 있기 때문에 일반적으로
ENUM
.
- 차량 식별 번호
- 모델 번호 (고정 크기)
오류
일부 사람들은 한도의 양쪽에 오류 메시지가 일치하지 않아 불편할 수 있지만 나를 귀찮게하지는 않습니다.
test=# INSERT INTO foo VALUES (repeat('x', 9));
ERROR: new row for relation "foo" violates check constraint "foo_x_check"
DETAIL: Failing row contains (xxxxxxxxx ).
test=# INSERT INTO foo VALUES (repeat('x', 11));
ERROR: value too long for type character(10)
대조 varchar
또한 위의 제안은 거의 항상 사용text
되는 규칙과 잘 맞습니다 . 당신 varchar(n)
도 역시 묻습니다 . 나는 그것을 사용하지 않습니다 . 적어도 마지막으로 사용한 시간을 기억할 수 없습니다 varchar(n)
.
- 사양에 내가 신뢰할 수있는 정적 너비 필드가있는 경우
char(n)
,
- 그렇지 않으면
text
효과적으로 사용합니다 varchar
(제한 없음)
의미있는 가변 길이 텍스트 키가 있고 최대 길이가 일정하다고 신뢰하는 사양을 발견하면 사용 varchar(n)
합니다. 그러나 그 기준에 맞는 것을 생각할 수 없습니다.
추가 사항
관련 Q & A :