가 varchar
단지 남은 앞에서 text
주위왔다, 또는 당신이 할 경우가 사용되어 원하는 를 사용하는가 varchar
? (또는 char
그 문제에 ..)
(저는 Postgres와 MySQL (MyISAM)을 매일 사용하므로 가장 관심이있는 것이지만 다른 데이터베이스에 대한 답변은 물론 환영합니다. ^ _-)
가 varchar
단지 남은 앞에서 text
주위왔다, 또는 당신이 할 경우가 사용되어 원하는 를 사용하는가 varchar
? (또는 char
그 문제에 ..)
(저는 Postgres와 MySQL (MyISAM)을 매일 사용하므로 가장 관심이있는 것이지만 다른 데이터베이스에 대한 답변은 물론 환영합니다. ^ _-)
답변:
text
열은 비표준이며 구현에 따라 다릅니다. : 대부분의 경우, 데이터베이스에 따라 그들은 다음과 같은 제한 사항 중 하나 이상을 조합 할 수 있습니다 색인하지 , 검색 할 수 없습니다 및 정렬되지 않음 .
이러한 모든 유형 은 동일한 C 데이터 구조를 사용하여 내부적으로 저장됩니다. .
이 text
열 은 특수화 된 버전이며BLOB
인덱싱에 제한이 있습니다.
이 두 가지 예만 다른 SQL RDBMS 시스템에 외삽 될 수 있으며 한 유형을 다른 유형보다 선택할시기를 충분히 이해해야합니다.
암시 적으로 명확하게하기 위해
TEXT
독점적이고 비표준이므로 절대 사용해서는 안됩니다 . 모든SQL
당신이 그것에 대해 쓰기는 할 수 없습니다 휴대용 당신에게 미래에 문제를 일으킬 보장합니다. ANSI 표준의 일부인 유형 만 사용하십시오 .
CHAR
모든 항목에 대해 고정 된 수의 문자가 있다는 것을 알고있을 때 사용하십시오 .VARCHAR
모든 항목에 가변 개수의 문자가있을 때 사용하십시오 .VARCHAR
, 제공 할 수 CLOB
와 함께 UTF-8
인코딩 또는 이에 상응하는 표준 유형입니다.TEXT
비표준이므로 절대 사용 하지 마십시오 .non standard and implementation specific
및 not indexable, not searchable and not sortable
에 대해 승인 했지만 내가 몰랐습니다. 나는 표준화 된 인상 아래 text
있었다 .
text
문자 유형으로 아무것도 찾을 수 없다고 생각합니다 . 나는 아무것도 보지 못했고, 일부 공급 업체는 그것을 부르는 등 long char
기본적으로 인코딩이 첨부 된 BLOB입니다.
TEXT
" 한다는 결론을 내리는 평판 좋은 자원이 많이 있습니다 . 다른 데이터베이스로 마이그레이션하려는 경우 특히 거래 중단이 아닙니다. 특히 postgres의 무제한 VARCHAR
(TOAST로 인해 MySQL과 같은 행 제한이 없기 때문에)이 무제한 VARCHAR
으로 변환되지 않을 수 있다는 점을 고려해야하기 때문에 특히 그렇습니다 . 어쨌든 다른 데이터베이스.
text
, varchar
그리고 char
모든 다른 이유로 사용됩니다. 물론 구현 차이 (크기가 얼마나 많은지 등)가 있지만 사용법과 의도도 고려해야합니다. 사용하는 유형은 또한 저장 될 데이터의 종류에 대해 알려줍니다 (또는 모든 것에 사용 text
합니다 ). 무언가 길이가 고정되어 있으면를 사용 합니다. 상한이 잘 정의 된 가변 길이가있는 경우을 사용하십시오 . 당신이 거의 제어 할 수없는 큰 텍스트 덩어리 라면 아마도 가장 좋은 방법 일 것입니다.char
varchar
text
char
, varchar
그리고 text
모두 같은 저장하기 위해 설계된 유형 의 데이터를. 따라서 두 가지 대답은 범위 검사에 관한 것입니다. 효율성 차이가 있다면 무엇입니까? 왜 varchar
이상을 사용 text
합니까?
데이터베이스는 속도 및 스토리지 최소화 와 같은 성능과 관련이 있습니다. 컴퓨터 세계의 대부분의 다른 부분에서, 당신은 당신의 문자열에 얼마나 많은 문자가 있는지 신경 쓰지 않을 것입니다. 그것은 백과 사전의 전체 내용 일 수 있습니다. 모두 문자열 일뿐입니다. 사실, 많은 언어가 문자열인지 숫자인지에 대해 귀찮게하지 않습니다.
그러나 컴퓨터가 더 빨라지고 더 많은 메모리를 확보함에 따라 사람들은 더 많은 데이터를 데이터베이스에 저장하고 더 빠른 쿼리를 수행합니다. 데이터베이스 CPU와 메모리는 오늘날 64Kb 메인 메모리와 10Mb 하드 드라이브 ( 메인 프레임 컴퓨터) 시절처럼 제한적입니다 .
고정 바이트 수는 가변 길이 수보다 처리하기가 훨씬 쉽습니다. 10 바이트는 1,000,000보다 다루기가 훨씬 쉽습니다. 따라서 데이터베이스는 단서를 제공하여 테라 바이트 단위의 데이터에서 기가 바이트의 결과를 마이크로 초 단위로 제공 할 수 있도록합니다. 그렇게 열심히 데이터베이스를 사용하지 않는다면, 제공하는 속도가 필요하지 않으며 불필요한 질문에 짜증이 날 것입니다. 그러나 성능이 필요한 경우 힌트를 줄 수 있습니다.
다른 답변에서 언급 한 바와 같이, 사용은 char
항상, 문자의 특정 번호를 사용하는 경우 varchar
길이가 다를 수 있지만 너무 큰 얻을하지 않는 경우 (내 생각 엔 대부분 DB의 A와 치료를 char
또는 text
크기에 따라), 그리고 text
그것을 경우 길이가 될 수 있습니다. 당신의 SQL의 시도가 사용하는 경우 text
열을, 어떻게 든 그것을 요약과에 넣어하는 것이 가장 수 있습니다 char
또는 작은 varchar
또한 열, 다음 할 where
의와는 order by
'그것에이야. 물론 성능이 중요한 경우에만 해당됩니다.
text
사용되지 않습니다. 데이터 저장 위치 및 액세스 방법과 관련된 사용법도 고려해야합니다.