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.