sql >> Databasteknik >  >> RDS >> Sqlserver

Skillnad mellan olika strängtyper i SQL Server?

text och ntext är utfasade, så låt oss utelämna dem ett ögonblick. För det som är kvar finns det 3 dimensioner:

  • Unicode (UCS-2) kontra icke-unicode:N framför namnet anger Unicode
  • Fast längd kontra variabel längd:var betecknar variabel, annars fast
  • I rad kontra BLOB:(max) eftersom längd anger en BLOB, annars är ett radvärde

Så med detta kan du läsa vilken typ som helst:

  • CHAR(10) :är en rad med fast längd som inte är Unicode av storlek 10
  • NVARCHAR(256) :är en Unicode med variabel längd i rad med storlek upp till 256
  • VARCHAR(MAX) :är en BLOB variabel längd som inte är Unicode

De föråldrade typerna text och ntext motsvarar de nya typerna varchar(max) och nvarchar(max) respektive.

När du går till detaljer, innebörden av in-row kontra BLOB suddar för små längder eftersom motorn kan optimera lagringen och dra en BLOB i rad eller tryck in ett i-rad-värde till den "lilla BLOB" allokeringsenheten, men detta är bara en implementeringsdetalj. Se tabell- och indexorganisation .

Ur programmeringssynpunkt, alla typer:CHAR , VARCHAR , NCHAR , NVARCHAR , VARCHAR(MAX) och NVARCHAR(MAX) , stöder ett enhetligt sträng-API:strängfunktioner . Den gamla, utfasade, skriver TEXT och NTEXT gör inte stöder detta API, de har ett separat, deperated, TEXT API att manipulera. Du bör inte använda de föråldrade typerna.

BLOB-typer stöder effektiva uppdateringar på plats genom att använda UPDATE table SET column.WRITE(@value, @offset) syntax.

Skillnaden mellan typer av fast längd och variabel längd försvinner vid radkomprimering på en tabell. Med radkomprimering aktiverad lagras fasta längdtyper och variabel längd i samma format och efterföljande utrymmen lagras inte på disken, se Implementering av radkomprimering . Observera att sidkomprimering innebär radkomprimering.



  1. Oracle Database 21c

  2. PostqreSQL i Rails:Hur får jag servern att köras lokalt OCH accepterar anslutningar på Unix-domänsocket?

  3. Hur man ansluter till MySQL med Perl

  4. Utlöser endast om ett villkor är uppfyllt i SQL Server