mediumblob - ¿Cuáles son los tamaños varchar óptimos para MySQL?
numeric mysql (2)
MySQL almacena un campo varchar como un registro de longitud variable, con un prefijo de un byte o de dos bytes para indicar el tamaño del registro.
Tener un patrón de tamaños de almacenamiento realmente no hace ninguna diferencia en cómo funcionará MySQL cuando se trate de un almacenamiento de registro de longitud variable. La longitud especificada en una declaración varchar (x) simplemente determinará la longitud máxima de los datos que se pueden almacenar. Básicamente, un varchar (16) no es diferente en el disco que un varchar (128).
Esta página de manual tiene una explicación más detallada.
Edit: Con respecto a su pregunta actualizada, la respuesta sigue siendo la misma. Un campo varchar solo utilizará tanto espacio en el disco como los datos que almacena en él (más una sobrecarga de uno o dos bytes). Por lo tanto, no importa si tiene un varchar (16) o un varchar (128), si almacena una cadena de 10 caracteres, solo va a utilizar 10 bytes (más 1 o 2) de espacio en disco. .
¿Cómo MySQL almacena un campo varchar? ¿Puedo asumir que el siguiente patrón representa tamaños de almacenamiento sensibles:
1,2,4,8,16,32,64,128,255 (max)
Una aclaración a través del ejemplo. Digamos que tengo un campo varchar de 20 caracteres. ¿MySQL al crear este campo, básicamente reserva espacio para 32 bytes (no estoy seguro si son bytes o no) pero solo permite ingresar 20?
Supongo que me preocupa la optimización del espacio en disco para una tabla masiva.
Para responder la pregunta, en el disco, MySql usa 1 + el tamaño que se usa en el campo para almacenar los datos (por lo tanto, si la columna fue declarada varchar (45) y el campo era "FooBar", usaría 7 bytes en el disco, a menos que, por supuesto, esté usando un conjunto de caracteres multibyte, donde estaría usando 14 bytes) Por lo tanto, sin embargo, si declara sus columnas, no hará una diferencia en el extremo del almacenamiento (usted dijo que está preocupado por la optimización del disco para una tabla masiva). Sin embargo, sí hace una diferencia en las consultas, ya que los VARCHAR se convierten en CHAR cuando MySql crea una tabla temporal (ORDEN, ORDEN, etc.) y cuantos más registros puede incluir en una sola página, menos memoria y más rápida será la exploración de la tabla. ser.