Jest varchar
tylko pozostałością sprzed text
podjechał lub istnieją przypadki, w których używać będziesz chcą , aby użyć varchar
? (Lub char
o to chodzi ..)
(Używam codziennie Postgres i MySQL (MyISAM), więc najbardziej mnie to interesuje, ale odpowiedzi na inne bazy danych są oczywiście mile widziane. ^ _-)
database
performance
mysql
efficiency
postgres
Izkata
źródło
źródło
text
jest przestarzała. Istnieją również względy użytkowania związane z miejscem przechowywania danych i sposobem ich uzyskania.Odpowiedzi:
Ogólnie
text
kolumny są niestandardowe i specyficzne dla implementacji. W wielu przypadkach, w zależności od bazy danych, mogą mieć kombinację jednego lub więcej z następujących ograniczeń: nie można indeksować , nie można przeszukiwać i nie można sortować .W Postgres
Wszystkie te typy są wewnętrznie zapisywane przy użyciu tej samej struktury danych C. .
W MySQL
text
Kolumna jest wyspecjalizowanym wersjaBLOB
i ma ograniczeń dotyczących indeksowania.Tylko te dwa przykłady można ekstrapolować na inne systemy SQL RDBMS i powinny być wystarczającym powodem, aby zrozumieć, kiedy wybrać jeden z typów.
CHAR
jeśli wiesz, że masz stałą liczbę znaków dla każdego wpisu.VARCHAR
gdy masz zmienną liczbę znaków dla każdego wpisu.VARCHAR
jest w stanie zapewnić,CLOB
zUTF-8
kodowaniem lub równoważnym typem standardowym.TEXT
ponieważ jest to niestandardowe.źródło
non standard and implementation specific
inot indexable, not searchable and not sortable
czego nie zdawałem sobie sprawy. Byłem pod wrażeniem, żetext
został ustandaryzowany.text
standard ASCII lub standard UNICODEtext
:-) czy jeden z pozostałych pół tuzinatext
standardów kodowania?text
w rodzaju postaci. Nic nie widziałem, niektórzy dostawcy nazywają tolong char
i tym podobne, jest to po prostu BLOB z dołączonym kodowaniem.TEXT
”. Jeśli zamierzasz przeprowadzić migrację do innej bazy danych, nie jest to przełomem, zwłaszcza że musisz wziąć pod uwagę, że postgres jest nieograniczonyVARCHAR
(ze względu na TOAST nie ma limitu wierszy, jak na przykład w MySQL) może nie tłumaczyć się na nieograniczonyVARCHAR
w w każdym razie inne bazy danych.text
,varchar
Ichar
są używane do różnych powodów. Istnieją oczywiście różnice w implementacji (jak duży rozmiar zajmują ... itd.), Ale są też względy użytkowania i intencji . Jakiego typu używasz, mówi ci też coś o rodzaju danych, które będą w nim przechowywane (lub wszyscy byśmy wykorzystalitext
do wszystkiego ). Jeśli coś ma określoną długość, używamychar
. Jeśli ma zmienną długość z dobrze określoną górną granicą, użyjvarchar
. Jeśli jest to duży fragment tekstu, nad którym nie masz kontrolitext
, prawdopodobnie byłbyś najlepszym wyborem.źródło
char
,varchar
itext
są przeznaczone do magazynowania ten sam typ danych. Tak więc obie odpowiedzi dotyczą sprawdzania granic. Jeśli występują różnice w wydajności, czym one są? Dlaczego miałbym używaćvarchar
więcejtext
?Bazy danych są głęboko zainteresowane wydajnością - szybkością i minimalizacją pamięci. W większości innych części świata komputerowego nie będziesz się przejmować liczbą znaków w ciągu znaków; może być jeden, może to być cała zawartość encyklopedii; wszystko to tylko struna. W rzeczywistości wiele języków nawet nie przejmuje się tym, czy jest to ciąg, czy liczba.
Ale gdy komputery stają się szybsze i zyskują więcej pamięci, ludzie umieszczają więcej danych w swoich bazach danych i wykonują bardziej wyszukane zapytania. W przypadku bazy danych procesor i pamięć są dziś tak samo ograniczające, jak w czasach pamięci głównej 64 KB i dysków twardych 10 Mb (na komputerach mainframe ).
Ustalona liczba bajtów jest znacznie łatwiejsza w obsłudze niż liczba o zmiennej długości. Z 10 bajtami łatwiej jest sobie poradzić niż 1 000 000. Tak więc twoja baza danych chce, abyś dał jej wskazówkę, aby mogła dostarczyć gigabajt wyników z terrabajtów danych w mikrosekundach. Jeśli nie używasz bazy danych tak mocno, nie będziesz potrzebować szybkości, jaką ona oferuje, i będziesz zirytowany niepotrzebnymi pytaniami. Ale jeśli potrzebujesz wydajności, z przyjemnością udzielisz wskazówek.
Jak zauważono w innych odpowiedziach, użyj,
char
jeśli zawsze używa określonej liczby znaków,varchar
jeśli długość może się różnić, ale nie staje się zbyt duża ( domyślam się, że większość DB traktuje to jakochar
lub wtext
zależności od rozmiaru), itext
jeśli może być dowolnej długości. Jeśli Twój SQL próbuje użyćtext
kolumny, najlepiej może ją jakoś podsumować i umieścić wchar
małej lub małejvarchar
kolumnie, a następnie zróbwhere
to iorder by
na tym. Oczywiście tylko wtedy, gdy liczy się wydajność.źródło