Het antwoord hangt af van of je het hebt over een kolom in een databasetabel, of een variabele in een PL/SQL-programma.
Databasekolom
De hoeveelheid gebruikte opslagruimte is evenredig aan de grootte van de opgeslagen gegevens.
PL/SQL-variabele
Als de variabele is gedeclareerd met een grootte van 1 tot 4000 (11g+) / 1999 (10g of eerder), wordt geheugen toegewezen voor de maximale lengte (d.w.z. VARCHAR2(100) vereist ten minste 100 bytes geheugen).
Als de variabele is gedeclareerd met een grootte van 4001 (11g+) / 2000 (10g of eerder) of groter, wordt geheugen toegewezen op basis van de grootte van de opgeslagen gegevens. (een interessante bijvraag zou zijn, als de waarde van de variabele wordt gewijzigd, hoe wordt het geheugen dan aangepast - wijst het een andere buffer toe met de nieuwe grootte?)
Referentie voor 10g:PL/SQL-gegevenstypen
Kleine VARCHAR2-variabelen zijn geoptimaliseerd voor prestaties en grotere zijn geoptimaliseerd voor efficiënt geheugengebruik. Het afkappunt is 2000 bytes. Voor een VARCHAR2 die 2000 bytes of langer is, wijst PL/SQL dynamisch alleen voldoende geheugen toe om de werkelijke waarde vast te houden. Voor een VARCHAR2-variabele die korter is dan 2000 bytes, wijst PL/SQL vooraf de volledige gedeclareerde lengte van de variabele toe. Als u bijvoorbeeld dezelfde waarde van 500 bytes toewijst aan een VARCHAR2(2000 BYTE)-variabele en aan een VARCHAR2(1999 BYTE)-variabele, neemt de eerste 500 bytes in beslag en de laatste 1999 bytes.
Referentie voor 11g:Geheugenoverhead vermijden in PL/SQL-code
Geef een maat op van meer dan 4000 tekens voor de variabele VARCHAR2; PL/SQL wacht totdat u de variabele toewijst en wijst vervolgens alleen zoveel opslagruimte toe als nodig is