sql >> Database >  >> RDS >> Sqlserver

Verschil tussen verschillende stringtypes in SQL Server?

text en ntext zijn verouderd, dus laten we ze even weglaten. Voor wat overblijft, zijn er 3 dimensies:

  • Unicode (UCS-2) versus niet-unicode:N voor de naam staat voor Unicode
  • Vaste lengte vs. variabele lengte:var geeft variabele aan, anders vast
  • In-rij vs. BLOB:(max) omdat lengte een BLOB aangeeft, anders is het een waarde in de rij

Dus hiermee kun je de betekenis van elk type lezen:

  • CHAR(10) :is een in-rij vaste lengte niet-Unicode van maat 10
  • NVARCHAR(256) :is een in-rij variabele lengte Unicode met een grootte tot 256
  • VARCHAR(MAX) :is een BLOB variabele lengte niet-Unicode

De verouderde typen text en ntext komen overeen met de nieuwe typen varchar(max) en nvarchar(max) respectievelijk.

Wanneer je naar details gaat, de betekenis van in-row vs. BLOB vervaagt voor kleine lengtes zoals de motor mogelijk optimaliseer de opslag en trek een BLOB in-row of push een in-row-waarde in de 'kleine BLOB'-toewijzingseenheid, maar dit is slechts een implementatiedetail. Zie Tabel- en indexorganisatie .

Vanuit een programmeringsoogpunt, alle typen:CHAR , VARCHAR , NCHAR , NVARCHAR , VARCHAR(MAX) en NVARCHAR(MAX) , ondersteunt een uniforme string-API:String-functies . De oude, verouderde typen TEXT en NTEXT doe niet deze API ondersteunen, hebben ze een aparte, deperated, TEXT API om te manipuleren. Gebruik de verouderde typen niet.

BLOB-typen ondersteunen efficiënte interne updates door gebruik te maken van de UPDATE table SET column.WRITE(@value, @offset) syntaxis.

Het verschil tussen typen met vaste lengte en variabele lengte verdwijnt wanneer rijcompressie op een tafel. Als rijcompressie is ingeschakeld, worden typen met vaste lengte en variabele lengte in hetzelfde formaat opgeslagen en worden volgspaties niet op schijf opgeslagen, zie Implementatie rijcompressie . Merk op dat paginacompressie rij-compressie impliceert.



  1. Geneste Set Model Php-bibliotheek

  2. Python verliest verbinding met MySQL-database na ongeveer een dag

  3. Waarom biedt Oracle geen ondersteuning voor het bijwerken van meerdere tabellen in één query?

  4. Kolom berekend uit een andere kolom?