VARCHAR
lagras i linje med tabellen. VARCHAR
är snabbare när storleken är rimlig, vars avvägning skulle vara snabbare beror på din data och din hårdvara, du skulle vilja jämföra ett verkligt scenario med dina data.
Det effektiva maximala antalet byte som kan lagras i en VARCHAR
eller VARBINARY
kolumnen är föremål för den maximala radstorleken på 65,535 bytes
, som delas mellan alla kolumner.
Till exempel en VARCHAR(255)
kolumn kan innehålla en sträng med en maximal längd på 255 tecken. Om vi antar att kolumnen använder teckenuppsättningen latin1 (en byte per tecken), är den faktiska lagringen som krävs längden på strängen (L), plus en byte för att registrera längden på strängen. För strängen 'abcd'
, L
är 4
och lagringskravet är fem byte. Om samma kolumn istället deklareras att använda ucs2
dubbelbyte teckenuppsättning, lagringskravet är 10 byte:Längden på 'abcd' är åtta byte och kolumnen kräver två byte för att lagra längder eftersom den maximala längden är större än 255 (upp till 510 bytes
).
För större data, överväg att använda TEXT
eller BLOB
. TEXT
och BLOB
kolumner implementeras på olika sätt i NDB
lagringsmotor, där varje rad i en TEXT
kolumnen består av två separata delar. En av dessa är av fast storlek (256 bytes)
, och lagras faktiskt i den ursprungliga tabellen. Den andra består av all data som överstiger 256 bytes
, som lagras i en dold tabell. Raderna i denna andra tabell är alltid 2,000 bytes
lång. Detta betyder att storleken på en TEXT
kolumnen är 256
om size <= 256
(där storlek representerar storleken på raden); annars är storleken 256 + size + (2000 – (size – 256) % 2000)
.
http://dev.mysql.com/doc/refman /5.6/sv/storage-requirements.html
Beror på din databasrelation, om du sällan använder de fälten i frågan. Till exempel för ytterligare information. Skapa separerad tabell är bra alternativ (normalisera).
ANMÄRKNINGAR: VARCHAR
är annorlunda med CHAR
. Om du skapar VARCHAR(250)
och infoga bara 20
tecken på den så tar den 5 bytes
+ L
annorlunda med CHAR(250)
, kommer det att ta 250 bytes
+ L
för samma skick.