Mam dane o zmiennej długości i chcę przechowywać w bazie danych SQL Server (2005). Chcę poznać najlepsze praktyki dotyczące wyboru typu TEKSTOWEGO SQL lub typu VARCHAR SQL, plusy i minusy w zakresie wydajności / śladu / funkcji.
sql-server
text
varchar
sqldatatypes
George2
źródło
źródło
Odpowiedzi:
Jeśli używasz programu SQL Server 2005 lub nowszego, użyj
varchar(MAX)
. Typtext
danych jest przestarzały i nie należy go używać do nowych prac programistycznych. Z dokumentów :źródło
TEXT
jest używany do dużych fragmentów danych łańcuchowych. Jeśli długość pola przekracza określony próg, tekst jest zapisywany poza wierszem.VARCHAR
jest zawsze przechowywany w rzędzie i ma limit 8000 znaków. Jeśli spróbujesz utworzyćVARCHAR(x)
, gdzie x> 8000 , pojawi się błąd:Te ograniczenia nie dotyczą długości
VARCHAR(MAX)
w SQL Server 2005 , które mogą być przechowywane z rzędu, podobnie jakTEXT
.Zauważ, że
MAX
nie jest to rodzaj stałej tutajVARCHAR
iVARCHAR(MAX)
są to bardzo różne typy, przy czym te ostatnie są bardzo zbliżoneTEXT
.We wcześniejszych wersjach programu SQL Server nie można było uzyskać
TEXT
bezpośredniego dostępu , można było tylko uzyskaćTEXTPTR
i używać goREADTEXT
orazWRITETEXT
funkcji.W SQL Server 2005 możesz bezpośrednio uzyskać dostęp do
TEXT
kolumn (choć nadal potrzebujesz jawnego rzutowania,VARCHAR
aby przypisać im wartość).TEXT
jest dobry:VARCHAR
jest dobry:Przez wybranie tutaj mam na myśli wydając jakieś pytania, które zwracają wartość kolumny.
Przez poszukiwanie tutaj mam na myśli wydając jakieś pytania, których wynik zależy od wartości
TEXT
lubVARCHAR
kolumnie. Obejmuje to używanie go w dowolnym stanieJOIN
lubWHERE
stanie.Ponieważ dane
TEXT
są przechowywane poza wierszem, zapytania nie obejmująceTEXT
kolumny są zwykle szybsze.Kilka przykładów tego, co
TEXT
jest dobre dla:Kilka przykładów tego, co
VARCHAR
jest dobre dla:Zasadniczo, jeśli kiedykolwiek potrzebujesz wartości tekstowej przekraczającej 200 znaków ORAZ nie używaj łączenia w tej kolumnie, użyj
TEXT
.W przeciwnym razie użyj
VARCHAR
.PS To samo dotyczy
UNICODE
włączonych,NTEXT
aNVARCHAR
także, których należy użyć w powyższych przykładach.PPS To samo dotyczy
VARCHAR(MAX)
iNVARCHAR(MAX)
że SQL Server 2005+ zastosowań zamiastTEXT
aNTEXT
. Musisz włączyćlarge value types out of row
do nichsp_tableoption
, jeśli chcesz, żeby być zawsze przechowywany z rzędu.Jak wspomniano powyżej i tutaj ,
TEXT
w przyszłych wydaniach będzie przestarzały:źródło
W SQL Server 2005 wprowadzono nowe typy danych:
varchar(max)
invarchar(max)
mają zalety starego typu tekstu: mogą zawierać do 2 GB danych, ale mają także większość zaletvarchar
invarchar
. Wśród tych zalet jest możliwość korzystania z funkcji manipulacji ciągami, takich jak substring ().Ponadto varchar (max) jest przechowywany w przestrzeni tabeli (dysku / pamięci), podczas gdy rozmiar jest mniejszy niż 8 KB. Tylko wtedy, gdy umieścisz więcej danych w polu, są one przechowywane poza obszarem tabeli. Dane przechowywane w obszarze tabeli są (zwykle) szybciej pobierane.
Krótko mówiąc, nigdy nie używaj tekstu, ponieważ istnieje lepsza alternatywa: (n) varchar (max). I używaj varchar (maks.), Gdy zwykły varchar nie jest wystarczająco duży, tj. Jeśli spodziewasz się, że ciąg, który zamierzasz przechowywać, przekroczy 8000 znaków.
Jak zauważono, możesz użyć SUBSTRING na typie danych TEKST, ale tylko tak długo, jak długo pola TEKST zawierają mniej niż 8000 znaków.
źródło
Nastąpiły pewne poważne zmiany w ms 2008 -> Przy podejmowaniu decyzji o tym, jakiego typu danych użyć, warto rozważyć poniższy artykuł. http://msdn.microsoft.com/en-us/library/ms143432.aspx
Bajtów na
źródło