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.
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.
Odpowiedzi:
Jeśli używasz programu SQL Server 2005 lub nowszego, użyj varchar(MAX). Typ textdanych jest przestarzały i nie należy go używać do nowych prac programistycznych. Z dokumentów :
Ważny
ntext,textiimagetypy danych zostaną usunięte w przyszłej wersji Microsoft SQL Server. Unikaj używania tych typów danych w nowych pracach programistycznych i planuj modyfikowanie aplikacji, które ich obecnie używają. Zamiast tego używaj nvarchar (max) , varchar (max) i varbinary (max) .
TEXTjest 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.
VARCHARjest 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:
Serwer: Msg 131, poziom 15, stan 3, wiersz 1
Rozmiar () nadany typowi „varchar” przekracza maksimum dozwolone dla dowolnego typu danych (8000)
Te ograniczenia nie dotyczą długości VARCHAR(MAX)w SQL Server 2005 , które mogą być przechowywane z rzędu, podobnie jak TEXT.
Zauważ, że MAXnie jest to rodzaj stałej tutaj VARCHARi VARCHAR(MAX)są to bardzo różne typy, przy czym te ostatnie są bardzo zbliżone TEXT.
We wcześniejszych wersjach programu SQL Server nie można było uzyskać TEXTbezpośredniego dostępu , można było tylko uzyskać TEXTPTRi używać go READTEXToraz WRITETEXTfunkcji.
W SQL Server 2005 możesz bezpośrednio uzyskać dostęp do TEXTkolumn (choć nadal potrzebujesz jawnego rzutowania, VARCHARaby 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 TEXTlub VARCHARkolumnie. Obejmuje to używanie go w dowolnym stanie JOINlub WHEREstanie.
Ponieważ dane TEXTsą przechowywane poza wierszem, zapytania nie obejmujące TEXTkolumny są zwykle szybsze.
Kilka przykładów tego, co TEXTjest dobre dla:
Kilka przykładów tego, co VARCHARjest dobre dla:
Zasadniczo, jeśli kiedykolwiek potrzebujesz wartości tekstowej przekraczającej 200 znaków ORAZ nie używaj łączenia w tej kolumnie, użyjTEXT .
W przeciwnym razie użyj VARCHAR.
PS To samo dotyczy UNICODEwłączonych, NTEXTa NVARCHARtakże, których należy użyć w powyższych przykładach.
PPS To samo dotyczy VARCHAR(MAX)i NVARCHAR(MAX)że SQL Server 2005+ zastosowań zamiast TEXTa NTEXT. Musisz włączyć large value types out of rowdo nich sp_tableoption, jeśli chcesz, żeby być zawsze przechowywany z rzędu.
Jak wspomniano powyżej i tutaj , TEXTw przyszłych wydaniach będzie przestarzały:
text in rowOpcja zostanie usunięta w przyszłej wersji z SQL Server . Unikaj korzystania z tej opcji w nowych pracach programistycznych i planuj modyfikować obecnie używane aplikacjetext in row. Zaleca się przechowywanie dużych ilości danych za pomocąvarchar(max),nvarchar(max)lubvarbinary(max)typów danych. Aby kontrolować zachowanie tych typów danych w wierszu i poza wierszem, użyjlarge value types out of rowopcji.
W SQL Server 2005 wprowadzono nowe typy danych: varchar(max)i nvarchar(max)
mają zalety starego typu tekstu: mogą zawierać do 2 GB danych, ale mają także większość zalet varchari nvarchar. 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.
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