VARCHAR
се съхранява в съответствие с таблицата. VARCHAR
е по-бърз, когато размерът е разумен, чийто компромис ще бъде по-бърз, зависи от вашите данни и хардуер, бихте искали да сравните сценарий от реалния свят с вашите данни.
Ефективният максимален брой байтове, които могат да бъдат съхранени в VARCHAR
или VARBINARY
колоната е обект на максималния размер на реда от 65,535 bytes
, което се споделя между всички колони.
Например VARCHAR(255)
колоната може да съдържа низ с максимална дължина от 255 знака. Ако приемем, че колоната използва набора от символи latin1 (един байт на знак), действителното необходимо съхранение е дължината на низа (L), плюс един байт за запис на дължината на низа. За низа 'abcd'
, L
е 4
и изискването за съхранение е пет байта. Ако вместо това същата колона е декларирана да използва ucs2
двубайтов набор от знаци, изискването за съхранение е 10 байта:Дължината на 'abcd' е осем байта и колоната изисква два байта за съхраняване на дължини, тъй като максималната дължина е по-голяма от 255 (до 510 bytes
).
За по-големи данни помислете за използването на TEXT
или BLOB
. TEXT
и BLOB
колоните се реализират по различен начин в NDB
устройство за съхранение, при което всеки ред в TEXT
колоната се състои от две отделни части. Един от тях е с фиксиран размер (256 bytes)
, и всъщност се съхранява в оригиналната таблица. Другият се състои от всякакви данни над 256 bytes
, който се съхранява в скрита таблица. Редовете в тази втора таблица винаги са 2,000 bytes
дълго. Това означава, че размерът на TEXT
колоната е 256
ако size <= 256
(където размерът представлява размера на реда); в противен случай размерът е 256 + size + (2000 – (size – 256) % 2000)
.
http://dev.mysql.com/doc/refman /5.6/bg/storage-requirements.html
Зависи от връзката ви с базата данни, ако рядко използвате тези полета в заявката. Например за допълнителна информация. Създаване на отделна таблица е добра опция (нормализиране).
БЕЛЕЖКИ: VARCHAR
е различно с CHAR
. Ако създадете VARCHAR(250)
и вмъкнете само 20
символи върху него, то ще отнеме 5 bytes
+ L
различно с CHAR(250)
, ще отнеме 250 bytes
+ L
за същото състояние.