VARCHAR
jest przechowywany w linii z tabelą. VARCHAR
jest szybszy, gdy rozmiar jest rozsądny, którego kompromis byłby szybszy, zależy od twoich danych i sprzętu, chciałbyś porównać scenariusz ze świata rzeczywistego ze swoimi danymi.
Efektywna maksymalna liczba bajtów, które mogą być przechowywane w VARCHAR
lub VARBINARY
kolumna podlega maksymalnemu rozmiarowi wiersza wynoszącemu 65,535 bytes
, który jest wspólny dla wszystkich kolumn.
Na przykład VARCHAR(255)
kolumna może zawierać ciąg znaków o maksymalnej długości 255 znaków. Zakładając, że kolumna używa zestawu znaków latin1 (jeden bajt na znak), rzeczywista wymagana pamięć to długość ciągu (L) plus jeden bajt do zarejestrowania długości ciągu. Dla ciągu 'abcd'
, L
to 4
a wymagana pamięć to pięć bajtów. Jeśli zamiast tego zadeklarowana jest ta sama kolumna do używania ucs2
zestaw znaków dwubajtowych, wymagana pamięć to 10 bajtów:długość „abcd” to osiem bajtów, a kolumna wymaga dwóch bajtów do przechowywania długości, ponieważ maksymalna długość jest większa niż 255 (do 510 bytes
).
W przypadku większych danych rozważ użycie TEXT
lub BLOB
. TEXT
i BLOB
kolumny są zaimplementowane inaczej w NDB
silnik przechowywania, w którym każdy wiersz w TEXT
kolumna składa się z dwóch oddzielnych części. Jeden z nich ma stały rozmiar (256 bytes)
i jest faktycznie przechowywany w oryginalnej tabeli. Druga składa się z dowolnych danych przekraczających 256 bytes
, który jest przechowywany w ukrytej tabeli. Wiersze w tej drugiej tabeli mają zawsze 2,000 bytes
długie. Oznacza to, że rozmiar TEXT
kolumna to 256
jeśli size <= 256
(gdzie rozmiar oznacza rozmiar wiersza); w przeciwnym razie rozmiar to 256 + size + (2000 – (size – 256) % 2000)
.
http://dev.mysql.com/doc/refman /5.6/pl/magazyn-wymagania.html
Zależy od relacji z bazą danych, jeśli rzadko używasz tych pól w zapytaniu. Na przykład po dodatkowe informacje. Tworzenie oddzielnej tabeli to dobra opcja (normalizacja).
UWAGI: VARCHAR
różni się od CHAR
. Jeśli utworzysz VARCHAR(250)
i wstaw tylko 20
znaków na nim to zajmie 5 bytes
+ L
inny z CHAR(250)
, zajmie to 250 bytes
+ L
w tym samym stanie.