Jaka jest różnica między CharField()
i TextField()
w Django? Dokumentacja mówi, że CharField()
należy stosować mniejsze strun i TextField()
powinny być wykorzystywane do większych łańcuchów. Okej, ale gdzie przebiega granica między „małym” a „dużym”? Co się tu dzieje pod maską, co sprawia, że tak jest?
302
TextField
domyślnie może mieć wpływ na przenośność Twojej aplikacji. Postgres może nie wpłynąć na wydajność, ale Oracle zapisze go jako taki,CLOB
który ma pewne irytacje, takie jak niemożność użycia pola w instrukcjach WHERE. Tylko coś do rozważenia.CharField
nie może miećmax_length
więcej niż 2000 lub powodujeORA-00910: specified length too long for its datatype
błąd.W niektórych przypadkach wiąże się to ze sposobem użycia pola. W niektórych silnikach DB różnice w polu określają, w jaki sposób (i czy) szukać tekstu w polu. Pola CharField są zwykle używane do rzeczy, które można przeszukiwać, np. Jeśli chcesz wyszukać „jeden” w ciągu „jeden plus dwa”. Ponieważ ciągi są krótsze, wyszukiwanie silnika zajmuje mniej czasu. Pola tekstowe zwykle nie są przeszukiwane (jak może treść bloga), ale przeznaczone są do przechowywania dużych fragmentów tekstu. Teraz większość z nich zależy od silnika DB i podobnie jak w Postgresie nie ma to znaczenia.
Nawet jeśli to nie ma znaczenia, jeśli użyjesz ModelForms, w formularzu pojawi się inny typ pola edycji. ModelForm wygeneruje HTML o rozmiarze jednego wiersza tekstu dla CharField i multilinii dla TextField.
źródło
Na przykład.,. 2 pola są dodawane w modelu jak poniżej.
Poniżej znajdują się zapytania mysql wykonywane po zastosowaniu migracji.
dla
TextField
(opisu) pole jest zdefiniowane jakolongtext
Maksymalna długość
TextField
MySQL wynosi 4 GB zgodnie z przeglądem typu ciągu .dla
CharField
(tytuł) maksymalna długość (wymagana) jest zdefiniowana jakovarchar(64)
źródło
Avoid using null on string-based fields such as CharField and TextField
:: docs.djangoproject.com/en/2.0/ref/models/fields/#null, więc najlepiej zachowaćnull=False
.CharField
ma maksymalną długość255
znaków, podczas gdyTextField
może pomieścić więcej niż255
znaki. Użyj,TextField
gdy masz duży ciąg jako dane wejściowe. Dobrze jest wiedzieć, że kiedymax_length
parametr jest przekazywany do aTextField
, przekazuje sprawdzanie poprawności długości doTextArea
widgetu.źródło
VARCHAR
typami kolumn mająmax_length
ograniczone do 255 znaków, jeśli używasz unikatowego = True dla pola. ” (Podkreślenie.)Miałem dziwny problem i zrozumiałem nieprzyjemną dziwną różnicę: kiedy otrzymuję adres URL od użytkownika jako CharField, a następnie używam go w tagu HTML przez href, dodaje ten adres URL do mojego adresu URL i nie tego chcę. Ale kiedy robię to przez Textfield , przekazuje tylko adres URL wpisany przez użytkownika. spójrz na te: adres mojej strony:
http://myweb.com
Wpis CharField:
http://some-address.com
po kliknięciu:
http://myweb.comhttp://some-address.com
Wpis TextField:
http://some-address.com
po kliknięciu:
http://some-address.com
Muszę wspomnieć, że adres URL jest zapisywany dokładnie tak samo w DB na dwa sposoby, ale nie wiem, dlaczego wynik jest inny po kliknięciu
źródło