Вы упомянули некоторые вещи, которые являются правдой, я объясню, как работает VARCHAR.
Если указать VARCHAR (60), это означает, что он может содержать до 60 символов. Если он содержит меньше символов, скажем, 50 - тогда MySQL использует 50 байтов для хранения данных вместо 60.
С CHAR (60) все обстоит иначе - он резервирует 60 байтов независимо от длины строки, которую вы хотите сохранить.
Теперь, как работает VARCHAR? Если вы укажете его как VARCHAR (255), это означает, что столбец зарезервирует 1 байт + длину байтов строки.
Этот 1 байт указывает на длину строки. 1 байт = вы можете хранить от 0 до 255 значений (от 2 до степени 8 = 256).
Что касается VARCHAR, значение которого превышает 255, вам необходимо каким-то образом хранить количество используемых байтов. Поскольку 1 байт может хранить только до 256 различных значений (0 - 255), вам необходимо использовать два байта. Два к степени 16 = 65536, что означает, что вы можете хранить любую строку до этого размера, а затем она складывает 2 байта, чтобы указать, какова длина строки.
Таким образом, чтобы сократить это - разница в производительности заключается в том, что если у вас есть VARCHAR (65536) и вы используете 200 байтов для хранения текста - вы тратите впустую тот 1 дополнительный байт, который будет использовать VARCHAR (65536).
Кто-то может подумать: «О, но это всего лишь 1 байт, кого это волнует». На самом деле многие люди - представьте, что у вас есть несколько столбцов VARCHAR на таблице, в которой 50 миллионов записей. Допустим, у вас есть 3 столбца varchar, каждый из которых расходует дополнительный байт - это 3 байта * 50 миллионов ~ 144 мегабайта потерянного пространства. Самое смешное, что это не просто пустое пространство. Это также способствует дополнительной обработке и использованию дополнительной оперативной памяти, когда вы хотите что-то прочитать.
И кто сказал, что в вашей БД будет только 1 таблица, которая станет большой?
Знание этой информации может помочь вам решить, что лучше всего использовать.
http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html Если вы не проверяли это раньше, это объясняет, как хранится каждый тип данных и сколько места ему требуется.