sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server Teksttype vs. varchar datatype

TEXT bruges til store stykker strengdata. Hvis længden af ​​feltet overstiger en vis grænse, gemmes teksten uden for rækken.

VARCHAR er altid gemt i rækker og har en grænse på 8000 tegn. Hvis du prøver at oprette en VARCHAR(x) , hvor x> 8000 , får du en fejlmeddelelse:

Server:Msg 131, Level 15, State 3, Line 1

Størrelsen () givet til typen "varchar" overstiger det maksimalt tilladte for enhver datatype (8000)

Disse længdebegrænsninger vedrører ikke VARCHAR(MAX) i SQL Server 2005 , som kan gemmes uden for rækken, ligesom TEXT .

Bemærk, at MAX er ikke en slags konstant her, VARCHAR og VARCHAR(MAX) er meget forskellige typer, hvor sidstnævnte er meget tæt på TEXT .

I tidligere versioner af SQL Server du kunne ikke få adgang til TEXT direkte kunne du kun få en TEXTPTR og brug det i READTEXT og WRITETEXT funktioner.

I SQL Server 2005 du kan få direkte adgang til TEXT kolonner (selvom du stadig har brug for en eksplicit cast til VARCHAR for at tildele dem en værdi).

TEXT er godt:

  • Hvis du skal gemme store tekster i din database
  • Hvis du ikke søger på værdien af ​​kolonnen
  • Hvis du sjældent vælger denne kolonne og ikke deltager i den.

VARCHAR er godt:

  • Hvis du gemmer små snore
  • Hvis du søger på strengværdien
  • Hvis du altid vælger det eller bruger det i joins.

Ved at vælge her mener jeg at udstede forespørgsler, der returnerer værdien af ​​kolonnen.

Ved at søge her mener jeg at udstede forespørgsler, hvis resultat afhænger af værdien af ​​TEXT eller VARCHAR kolonne. Dette inkluderer brug af det i enhver JOIN eller WHERE tilstand.

Som TEXT er gemt uden for rækken, forespørgslerne involverer ikke TEXT kolonne er normalt hurtigere.

Nogle eksempler på hvad TEXT er god til:

  • Blogkommentarer
  • Wiki-sider
  • Kodekilde

Nogle eksempler på hvad VARCHAR er god til:

  • Brugernavne
  • Sidetitler
  • Filnavne

Som en tommelfingerregel, hvis du nogensinde har brug for, at din tekstværdi overstiger 200 tegn OG brug ikke join på denne kolonne, brug TEXT .

Ellers brug VARCHAR .

P.S. Det samme gælder for UNICODE aktiveret NTEXT og NVARCHAR også, som du bør bruge til eksempler ovenfor.

P.P.S. Det samme gælder for VARCHAR(MAX) og NVARCHAR(MAX) at SQL Server 2005+ bruger i stedet for TEXT og NTEXT . Du skal aktivere large value types out of row for dem med sp_tableoption hvis du vil have dem altid gemt uden for rækken.

Som nævnt ovenfor og her , TEXT vil blive udfaset i fremtidige udgivelser:

text in row vil blive fjernet i en fremtidig version af SQL Server . Undgå at bruge denne mulighed i nyt udviklingsarbejde, og planlæg at ændre applikationer, der i øjeblikket bruger text in row . Vi anbefaler, at du gemmer store data ved at bruge varchar(max) , nvarchar(max) , eller varbinary(max) datatyper. Brug large value types out of row for at kontrollere opførsel i række og ud af række af disse datatyper mulighed.



  1. MySQL:Kan ikke oprette tabel (fejlnr:150)

  2. MySQL Insert Command vs T-SQL Query Syntaks med eksempler

  3. java.sql.SQLException:Ingen passende driver fundet til jdbc:microsoft:sqlserver

  4. Hvordan får du PyPy, Django og PostgreSQL til at arbejde sammen?