[sql] 장고 차 필드 vs 텍스트 필드

장고 CharField()와 의 차이점은 무엇입니까 TextField()? 문서는 것을 말한다 CharField()작은 문자열을 사용해야하며 TextField()더 큰 문자열을 사용해야합니다. 좋아,하지만 “작은”과 “큰”사이의 선은 어디에 있습니까? 이 사건을 일으킨 사건은 무엇입니까?



답변

RDBMS varchar(또는 이와 유사한) 의 차이점 은 일반적으로 최대 길이로 지정되며 성능 또는 스토리지 측면에서 더 효율적일 수 있으며 text(또는 유사한) 유형은 일반적으로 하드 코딩 된 구현 제한에 의해서만 제한됩니다 ( DB 스키마).

PostgreSQL 9는 특히 “이 세 가지 유형 사이에는 성능 차이가 없습니다”라고 말하지만 AFAIK에는 MySQL과 같은 몇 가지 차이점이 있으므로 명심해야합니다.

경험 상으로는 CharField최대 길이를 제한해야 할 때 사용하는 것이 좋습니다 TextField.

이것은 실제로 장고에 한정되지 않습니다.


답변

어떤 경우에는 필드가 사용되는 방식과 관련이 있습니다. 일부 DB 엔진에서 필드 차이에 따라 필드에서 텍스트를 검색하는 방법 (및 경우)이 결정됩니다. CharFields는 일반적으로 문자열 “one plus two”에서 “one”을 검색하려는 경우와 같이 검색 가능한 항목에 사용됩니다. 문자열이 짧기 때문에 엔진을 검색하는 데 시간이 덜 걸립니다. 텍스트 필드는 일반적으로 검색 (예 : 블로그 본문)을 통해 검색되는 것이 아니라 많은 양의 텍스트를 포함하도록되어 있습니다. 이제 대부분이 DB 엔진에 의존하며 Postgres와 마찬가지로 중요하지 않습니다.

중요하지 않더라도 ModelForms를 사용하면 양식에 다른 유형의 편집 필드가 나타납니다. ModelForm은 CharField의 경우 한 줄의 텍스트와 TextField의 여러 줄 크기의 HTML 양식을 생성합니다.


답변

예를 들어. 다음과 같은 모델에 2 개의 필드가 추가됩니다.

description = models.TextField(blank=True, null=True)
title = models.CharField(max_length=64, blank=True, null=True)

다음은 마이그레이션이 적용될 때 실행되는 mysql 쿼리입니다.


위한 TextField(설명) 필드가 정의되고longtext

ALTER TABLE `sometable_sometable` ADD COLUMN `description` longtext NULL;

string-type-overviewTextField 에 따르면 MySQL 의 최대 길이 는 4GB 입니다.


위한 CharField(제목)를 MAX_LENGTH (필수)로 정의varchar(64)

ALTER TABLE `sometable_sometable` ADD COLUMN `title` varchar(64) NULL;
ALTER TABLE `sometable_sometable` ALTER COLUMN `title` DROP DEFAULT;


답변

CharField최대 255문자 수인 반면 TextField최대 255자 수를 초과 할 수 있습니다 . TextField입력으로 큰 문자열이있는 경우 사용하십시오 . max_length매개 변수가 전달 될 때 TextField길이 유효성 검증을 TextArea위젯에 전달 한다는 것을 아는 것이 좋습니다 .


답변

이상한 문제가 있었고 불쾌한 이상한 차이점을 이해했습니다 .CharField 로 사용자로부터 URL을 얻은 다음 href로 태그를 HTML에 사용하면 해당 URL이 내 URL에 추가 되고 원하는 것이 아닙니다. 그러나 텍스트 필드로 수행하면 사용자가 입력 한 URL 전달 합니다. 이것들을보십시오 : 내 웹 사이트 주소 :http://myweb.com

CharField entery : http://some-address.com

그것을 클릭 할 때 : http://myweb.comhttp://some-address.com

텍스트 입력란 : http://some-address.com

그것을 클릭 할 때 : http://some-address.com

URL이 두 가지 방법으로 DB에 정확히 동일하게 저장된다는 것을 언급해야 하지만 클릭 할 때 결과가 다른 이유를 모르겠습니다.


답변