A VARCHAR(255)
може да съхранява до 255 знака, независимо от броя байтове на знак, изискван от кодирането на набора от знаци.
Изискването за съхранение е дължината на действително съхранените данни (не максималната), плюс 1 или 2 байта за съхраняване на дължината на данните -- 1 байт се използва, освен ако максималната възможна дължина в байтове е> 255... така че VARCHAR(255) COLLATE utf8mb4
използва 2 байта за съхраняване на дължината, докато VARCHAR(255) COLLATE ascii_general_ci
използва 1 байт за съхраняване на дължината. Всяка колона може да съхранява не повече от 255 знака.
Декларирайте размера на колоната като подходящ за данните, които се съхраняват. Използването на 255 е обичайно, но обикновено е червен флаг за небрежен дизайн, тъй като рядко тази конкретна стойност представлява смислено максималната подходяща дължина на колона.
За разлика от това, CHAR(255) COLLATE utf8mb4
винаги консумира 255 × 4 (максимално възможните) байта на колона на ред и 0 байта за съхраняване на дължината, тъй като съхранената дължина не се променя. Тези колони рядко са подходящи, освен когато колоната винаги е с известна дължина и наборът от знаци е еднобайтов, като например UUID, което би било CHAR(36) COLLATE ascii_general_ci
.
https:/ /dev.mysql.com/doc/refman/5.7/en/storage-requirements.html#data-types-storage-reqs-strings