От MySQL Документация :
Разликата между CHAR
и VARCHAR
стойностите е начинът, по който се съхраняват, CHAR (10)
изисква 10 байта място за съхранение, независимо колко знака използвате, защото данните са подплатени отдясно с интервали, VARCHAR (10)
отнема само 1 байт (в 1 байтов набор от знаци) + префикс за дължина (1, когато дължината е 255 или по-малко, 2 в противен случай... Не знам защо key_len за EXPLAIN
добавете 2 байта)
Не разбирам какво имате предвид с крайни празни места, въпреки че мога да си представя, че имате предвид излишъка от крайни интервали с VARCHAR
те са съкратени с предупреждение, междувременно в CHAR
колони тези интервали се съкращават безшумно, това има някаква смислена причина CHAR
се съхраняват с крайни празни места в края.
Относно набора от знаци в тази връзка можете да видите, че броят на знаците за CHAR
или VARCHAR
е същото, но вашето хранилище ще изисква от 1 до 4 байта на знак, тук
е списъкът с поддържан набор от символи и тук байтовете на знак.
Това, което прочетох за различни формати на редове за InnoDB
Характеристики на формата на излишния ред :
Характеристики на формата на КОМПАКТЕН ред :