sql >> Database >  >> RDS >> Sqlserver

SQL Server-teksttype versus varchar-gegevenstype

TEXT wordt gebruikt voor grote stukken tekenreeksgegevens. Als de lengte van het veld een bepaalde drempel overschrijdt, wordt de tekst buiten de rij opgeslagen.

VARCHAR wordt altijd in een rij opgeslagen en heeft een limiet van 8000 karakters. Als u een VARCHAR(x) . probeert te maken , waarbij x> 8000 , krijg je een foutmelding:

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

De grootte () die aan het type 'varchar' is gegeven, overschrijdt het maximum dat is toegestaan ​​voor elk gegevenstype (8000)

Deze lengtebeperkingen hebben geen betrekking op VARCHAR(MAX) in SQL Server 2005 , die buiten de rij kan worden opgeslagen, net als TEXT .

Merk op dat MAX is hier geen soort constante, VARCHAR en VARCHAR(MAX) zijn zeer verschillende typen, waarbij de laatste erg dicht bij TEXT .

In eerdere versies van SQL Server je had geen toegang tot de TEXT rechtstreeks, je zou alleen een TEXTPTR . kunnen krijgen en gebruik het in READTEXT en WRITETEXT functies.

In SQL Server 2005 je hebt direct toegang tot TEXT kolommen (hoewel je nog steeds een expliciete cast nodig hebt voor VARCHAR om er een waarde aan toe te kennen).

TEXT is goed:

  • Als u grote teksten in uw database moet opslaan
  • Als u niet zoekt op de waarde van de kolom
  • Als je deze kolom zelden selecteert en er niet aan meedoet.

VARCHAR is goed:

  • Als je kleine strings opslaat
  • Als u zoekt op de tekenreekswaarde
  • Als je het altijd selecteert of in joins gebruikt.

Door te selecteren hier bedoel ik het uitvoeren van vragen die de waarde van de kolom retourneren.

Door zoeken hier bedoel ik het uitvoeren van vragen waarvan het resultaat afhangt van de waarde van de TEXT of VARCHAR kolom. Dit omvat het gebruik ervan in elke JOIN of WHERE staat.

Als de TEXT wordt buiten de rij opgeslagen, de zoekopdrachten die geen betrekking hebben op de TEXT kolommen zijn meestal sneller.

Enkele voorbeelden van wat TEXT is goed voor:

  • Blogreacties
  • Wiki-pagina's
  • Codebron

Enkele voorbeelden van wat VARCHAR is goed voor:

  • Gebruikersnamen
  • Paginatitels
  • Bestandsnamen

Als vuistregel geldt dat als u ooit een tekstwaarde nodig heeft die hoger is dan 200 tekens EN gebruik geen join in deze kolom, gebruik TEXT .

Gebruik anders VARCHAR .

P.S. Hetzelfde geldt voor UNICODE ingeschakeld NTEXT en NVARCHAR ook, die je zou moeten gebruiken voor bovenstaande voorbeelden.

P.P.S. Hetzelfde geldt voor VARCHAR(MAX) en NVARCHAR(MAX) dat SQL Server 2005+ gebruikt in plaats van TEXT en NTEXT . U moet large value types out of row inschakelen voor hen met sp_tableoption als u wilt dat ze altijd buiten de rij worden opgeslagen.

Zoals hierboven vermeld en hier , TEXT zal in toekomstige releases worden beëindigd:

De text in row optie wordt verwijderd in een toekomstige versie van SQL Server . Vermijd het gebruik van deze optie in nieuw ontwikkelingswerk en plan om applicaties aan te passen die momenteel text in row gebruiken . We raden u aan grote gegevens op te slaan met behulp van de varchar(max) , nvarchar(max) , of varbinary(max) gegevens typen. Gebruik de large value types out of row om het gedrag binnen de rij en buiten de rij van deze gegevenstypen te controleren. optie.



  1. PostgreSQL 11 implementeren en beheren:nieuw in ClusterControl 1.7.1

  2. Een opgeslagen functie aanroepen (die een array van een door de gebruiker gedefinieerd type retourneert) in oracle via een databaselink

  3. PLSQL-codeprestaties afstemmen of testen in Oracle D2k-formulieren

  4. Lijst met SQL Server-vergelijkingsoperators