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.

Author: Brian Webster, 2009-02-19

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, oraz image 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.

 184
Author: Mladen Prajdic,
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), lub varbinary(max) typów danych. Aby kontrolować zachowanie tych typów danych w wierszu i poza wierszem, użyj opcji large value types out of row.

 269
Author: Quassnoi,
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.

 37
Author: edosoft,
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

  1. varchar( max), varbinary(max), XML, tekst lub kolumna obrazu 2^31-1 2^31-1
  2. nvarchar(max) kolumna 2^30-1 2^30-1
 6
Author: Draz,
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