Typ tekstu SQL Server vs. typ danych varchar [zamknięty]
Mam dane o zmiennej długości znaków i chcę je przechowywać w bazie danych SQL Server (2005). Chcę poznać kilka najlepszych praktyk na temat tego, jak wybrać tekst typu SQL lub wybrać typ SQL VARCHAR, plusy i minusy w wydajności / footprint / function.
4 answers
Jeśli używasz SQL Server 2005 lub nowszego, użyj varchar(MAX)
. Typ danych text
jest przestarzały i nie powinien być używany do nowych prac programistycznych. Z docs :
Ważne
ntext
,text
, orazimage
typy 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 obecnie ich używają. Użyj nvarchar (max) , varchar(max) i varbinary(max) zamiast.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-23 14:41:50
TEXT
jest używany do dużych fragmentów ciągów danych. Jeśli długość pola przekracza określony próg, tekst jest zapisywany poza wierszem.
VARCHAR
jest zawsze przechowywany w wierszu i ma limit 8000 postaci. Jeśli spróbujesz utworzyć VARCHAR(x)
, gdzie x > 8000 , otrzymasz błąd:
Serwer: Msg 131, Poziom 15, Stan 3, Linia 1
Rozmiar () podany dla typu "varchar" przekracza maksymalną dozwoloną dla dowolnego typu danych (8000)
Te ograniczenia długości nie dotyczą VARCHAR(MAX)
w SQL Server 2005, które mogą być przechowywane poza wierszem, podobnie jak TEXT
.
Zauważ, że MAX
nie jest tu rodzajem stałej, VARCHAR
i VARCHAR(MAX)
są bardzo różne typy, te ostatnie są bardzo bliskie TEXT
.
W poprzednich wersjach SQL Server nie można było uzyskać bezpośredniego dostępu do TEXT
, można było jedynie uzyskać TEXTPTR
i używać go w funkcjach READTEXT
i WRITETEXT
.
In SQL Server 2005 możesz uzyskać bezpośredni dostęp do kolumn TEXT
(choć nadal potrzebujesz jawnego rzutu do VARCHAR
, Aby przypisać im wartość).
TEXT
jest dobry:
- jeśli potrzebujesz przechowywać duże teksty w bazie danych
- jeśli nie wyszukasz wartości kolumny
- jeśli zaznaczasz tę kolumnę rzadko i nie dołączasz do niej.
VARCHAR
jest dobry:
- jeśli przechowujesz małe sznurki
- jeśli wyszukasz wartość ciągu
- jeśli zawsze go zaznaczasz lub używasz w połączeniach.
Przez wybierając tutaj mam na myśli wysyłanie zapytań zwracających wartość kolumny.
Przez szukanie tutaj mam na myśli wysyłanie zapytań, których wynik zależy od wartości kolumny TEXT
LUB VARCHAR
. Obejmuje to użycie go w dowolnym JOIN
lub WHERE
stanie.
Ponieważ {[0] } jest przechowywane poza wierszem, zapytania Nie obejmujące kolumny TEXT
są zwykle szybsze.
Kilka przykładów tego, co TEXT
jest dobre dla:
- komentarze do bloga
- strony Wiki
- źródło kodu
Kilka przykładów tego, do czego VARCHAR
jest dobre:
- nazwy użytkowników
- tytuły stron
- nazwy plików
Z reguły, jeśli kiedykolwiek potrzebujesz, aby wartość tekstu przekroczyła 200 znaki i nie używaj join w tej kolumnie, użyj TEXT
.
W przeciwnym razie użyj VARCHAR
.
p. s. to samo dotyczy UNICODE
włączone NTEXT
i NVARCHAR
, jak również, które należy użyć do przykładów powyżej.
P. P. S. to samo dotyczy VARCHAR(MAX)
i NVARCHAR(MAX)
, które SQL Server 2005+ używa zamiast TEXT
i NTEXT
. Musisz włączyć large value types out of row
dla nich za pomocą sp_tableoption
, jeśli chcesz, aby były zawsze przechowywane poza wierszem.
Jak wspomniano powyżej i proszę., TEXT
jest to bardzo ważne, ponieważ jest to bardzo ważne.]}
Opcja
text in row
zostanie usunięta w przyszłości wersja SQL Server . Unikaj używania tej opcji w nowych pracach programistycznych i planuj modyfikowanie aplikacji, które obecnie używajątext in row
. Zalecamy przechowywanie dużych 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żyj opcjilarge value types out of row
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-05 19:41:32
W SQL server 2005 wprowadzono nowe typy danych: varchar(max)
oraz nvarchar(max)
Mają zalety starego typu tekstu: mogą zawierać op do 2GB danych, ale mają również większość zalet varchar
i nvarchar
. Wśród tych zalet jest możliwość używania funkcji manipulacji łańcuchami, takich jak substring().
Ponadto, varchar (max) jest przechowywany w przestrzeni tabeli (Dysk/Pamięć), podczas gdy rozmiar jest poniżej 8Kb. Tylko wtedy, gdy umieścisz więcej danych w polu, są one zapisywane poza tabelą miejsce. Dane przechowywane w przestrzeni tabeli są (zazwyczaj) pobierane szybciej.
W skrócie, nigdy nie używaj tekstu, ponieważ istnieje lepsza alternatywa: (n)varchar (max). I używaj tylko varchar (max), gdy zwykły varchar nie jest wystarczająco duży, tzn. jeśli spodziewasz się, że ciąg znaków, który zamierzasz przechowywać, przekroczy 8000 znaków.
Jak zostało zaznaczone, można używać PODŁAŃCUCHÓW w datatype tekstowym, ale tylko tak długo, jak długo pola tekstowe zawierają mniej niż 8000 znaków.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-22 13:31:37
Zaszły poważne zmiany w ms 2008 - > warto rozważyć następujący artykuł przy podejmowaniu decyzji o tym, jakiego typu danych użyć. http://msdn.microsoft.com/en-us/library/ms143432.aspx
Bajtów na
- varchar( max), varbinary(max), XML, tekst lub kolumna obrazu 2^31-1 2^31-1
- nvarchar(max) kolumna 2^30-1 2^30-1
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-25 15:14:19