Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server Typ tekstowy a typ danych varchar

TEXT jest używany do dużych fragmentów danych łańcuchowych. Jeśli długość pola przekroczy określony próg, tekst zostanie zapisany poza wierszem.

VARCHAR jest zawsze przechowywany w wierszu i ma limit 8000 postacie. Jeśli spróbujesz utworzyć VARCHAR(x) , gdzie x> 8000 , pojawia się błąd:

Serwer:Msg 131, poziom 15, stan 3, linia 1

Rozmiar () nadany typowi „varchar” przekracza maksimum dozwolone dla dowolnego typu danych (8000)

Te ograniczenia długości nie dotyczą VARCHAR(MAX) w SQL Server 2005 , który może być przechowywany poza wierszem, podobnie jak TEXT .

Zwróć uwagę, że MAX nie jest tutaj rodzajem stałej, VARCHAR i VARCHAR(MAX) są bardzo różne typy, te ostatnie są bardzo zbliżone do TEXT .

We wcześniejszych wersjach SQL Server nie można było uzyskać dostępu do TEXT bezpośrednio, możesz uzyskać tylko TEXTPTR i użyj go w READTEXT i WRITETEXT funkcje.

W SQL Server 2005 możesz uzyskać bezpośredni dostęp do TEXT kolumny (chociaż nadal potrzebujesz jawnego rzutowania na VARCHAR aby przypisać im wartość).

TEXT jest dobre:

  • Jeśli potrzebujesz przechowywać duże teksty w swojej bazie danych
  • Jeśli nie wyszukujesz według wartości kolumny
  • Jeśli rzadko wybierasz tę kolumnę i nie dołączasz do niej.

VARCHAR jest dobre:

  • Jeśli przechowujesz małe struny
  • Jeśli szukasz wartości ciągu
  • Jeśli zawsze go wybierzesz lub użyjesz w złączeniach.

wybierając tutaj mam na myśli wydawanie jakichkolwiek zapytań, które zwracają wartość kolumny.

wyszukując mam tu na myśli wydawanie dowolnych zapytań, których wynik zależy od wartości TEXT lub VARCHAR kolumna. Obejmuje to używanie go w dowolnym JOIN lub WHERE stan.

Jako TEXT jest przechowywany poza wierszem, zapytania nie zawierają TEXT kolumny są zwykle szybsze.

Kilka przykładów tego, co TEXT jest dobre dla:

  • Komentarze na blogu
  • Strony Wiki
  • Źródło kodu

Kilka przykładów tego, co VARCHAR jest dobre dla:

  • Nazwy użytkownika
  • Tytuły stron
  • Nazwy plików

Ogólna zasada:jeśli kiedykolwiek będziesz potrzebować, by wartość tekstu przekraczała 200 znaki ORAZ nie używaj złączenia w tej kolumnie, użyj TEXT .

W przeciwnym razie użyj VARCHAR .

PS To samo dotyczy UNICODE włączony NTEXT i NVARCHAR również, których powinieneś użyć w powyższych przykładach.

PSS To samo dotyczy VARCHAR(MAX) i NVARCHAR(MAX) ten SQL Server 2005+ używa zamiast TEXT i NTEXT . Musisz włączyć large value types out of row dla nich z sp_tableoption jeśli chcesz, aby zawsze były przechowywane poza rzędami.

Jak wspomniano powyżej i tutaj , TEXT zostanie wycofany w przyszłych wydaniach:

text in row opcja zostanie usunięta w przyszłej wersji SQL Server . Unikaj używania tej opcji w nowych pracach programistycznych i zaplanuj modyfikację aplikacji, które obecnie używają text in row . Zalecamy przechowywanie dużych danych za pomocą varchar(max) , nvarchar(max) lub varbinary(max) typy danych. Aby kontrolować zachowanie w wierszu i poza wierszem tych typów danych, użyj large value types out of row opcja.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Która składnia łączenia jest lepsza?

  2. Jak znaleźć ustawienie ANSI_NULLS bazy danych w SQL Server (T-SQL)

  3. Import SSIS Excel wymuszający nieprawidłowy typ kolumny

  4. Jak mogę zapytać o wartość w kolumnie SQL Server XML?

  5. Jak używać tego samego harmonogramu dla wielu zadań agenta programu SQL Server (T-SQL)