VARCHAR
er gemt inline med bordet. VARCHAR
er hurtigere, når størrelsen er rimelig, hvis afvejning ville være hurtigere afhænger af dine data og din hardware, du vil gerne benchmarke et virkelighedsscenario med dine data.
Det effektive maksimale antal bytes, der kan gemmes i en VARCHAR
eller VARBINARY
kolonne er underlagt den maksimale rækkestørrelse på 65.535 bytes
, som er delt mellem alle kolonner.
For eksempel en VARCHAR(255)
kolonne kan indeholde en streng med en maksimal længde på 255 tegn. Hvis vi antager, at kolonnen bruger latin1-tegnsættet (én byte pr. tegn), er den faktiske nødvendige lagring længden af strengen (L), plus en byte til at registrere længden af strengen. For strengen 'abcd'
, L
er 4
og lagerkravet er fem bytes. Hvis den samme kolonne i stedet erklæres for at bruge ucs2
dobbelt-byte tegnsæt, lagerkravet er 10 bytes:Længden af 'abcd' er otte bytes, og kolonnen kræver to bytes for at gemme længder, fordi den maksimale længde er større end 255 (op til 510 bytes
).
For større data kan du overveje at bruge TEXT
eller BLOB
. TEKST
og BLOB
kolonner er implementeret forskelligt i NDB
lagermotor, hvor hver række i en TEXT
kolonnen består af to separate dele. En af disse er af fast størrelse (256 bytes)
, og er faktisk gemt i den originale tabel. Den anden består af alle data, der overstiger 256 bytes
, som er gemt i et skjult bord. Rækkerne i denne anden tabel er altid 2.000 bytes
lang. Det betyder, at størrelsen af en TEXT
kolonnen er 256
hvis størrelse <=256
(hvor størrelsen repræsenterer rækkens størrelse); ellers er størrelsen 256 + størrelse + (2000 – (størrelse – 256) % 2000)
.
http://dev.mysql.com/doc/refman /5.6/da/storage-requirements.html
Afhænger af din databaserelation, hvis du sjældent bruger disse felter i forespørgslen. For eksempel for yderligere info. Opret adskilt tabel er gode muligheder (normalisere).
BEMÆRKNINGER: VARCHAR
er anderledes med CHAR
. Hvis du opretter VARCHAR(250)
og indsæt kun 20
tegn på det, så vil det tage 5 bytes
+ L
anderledes med CHAR(250)
, vil det tage 250 bytes
+ L
for samme tilstand.