Интересно, сколько фактического места для хранения будут занимать эти два типа данных, поскольку документация MySQL немного неясна по этому вопросу.
CHAR(M) M × w байт, 0 ‹= M ‹= 255, где w — количество байтов, необходимое для символа максимальной длины в наборе символов.
VARCHAR(M), VARBINARY(M) L + 1 байт, если для значений столбца требуется от 0 до 255 байт, L + 2 байта, если для значений может потребоваться более 255 байт
Мне кажется, это означает, что для базы данных с кодировкой utf8 CHAR всегда будет занимать 32 бита на символ, тогда как VARCHAR будет занимать от 8 до 32 в зависимости от фактической длины хранимых символов в байтах. Это правильно? Или VARCHAR подразумевает 8-битную ширину символа, а хранение многооктетных символов UTF8 фактически использует несколько «символов» из VARCHAR? Или VARCHAR также всегда хранит 32 бита на символ? Так много возможностей.
Не то, о чем мне когда-либо приходилось беспокоиться раньше, но я начинаю сталкиваться с ограничениями размера временной таблицы в памяти, и я не обязательно хочу увеличивать доступный пул MySQL (во второй раз).