Si fuera un C-Program, me gustaría dedicar un tiempo a pensar en eso también. Pero con una base de datos lo dejo al motor de DB.
Los programadores de DB dedicaron mucho tiempo a pensar en la mejor disposición de la memoria, así que simplemente diga a la base de datos lo que necesita y almacenará los datos de la manera que mejor se adapte al motor de DB (generalmente).
Si desea alinear sus datos, tendrá que exacto conocimiento de la organización interna de datos: ¿Cómo se almacena la cadena? Uno, dos o 4 bytes para almacenar la longitud? ¿Se almacena como secuencia de bytes simples o codificada en UTF-8 UTF-16 UTF-32? ¿El DB necesita bytes adicionales para identificar valores NULL o> MAXINT? Tal vez la secuencia se almacena como una secuencia de bytes terminada en NUL; luego, se necesita un byte más internamente.
También con VARCHAR no es necesario que la DB siempre asigne 100 (128) bytes para su cadena. Tal vez almacena solo un puntero a donde está el espacio para los datos reales.
Por lo tanto, le sugiero que use VARCHAR (100) si ese es su requisito. Si el DB decide alinearlo de alguna manera, también hay espacio para datos internos adicionales.
Otra manera: supongamos que utiliza VARCHAR (128) y todo se combina: el DB asigna 128 bytes para sus datos. Además, necesita 2 bytes más para almacenar la longitud real de la cadena - hace 130 bytes - y luego podría ser que el DB alinee los datos con el siguiente límite (digamos 32 bytes): los datos reales que se necesitan en el disco ahora son 160 bytes 8-}
¿Se trata de una pregunta para un RDBMS específico o uno general? –
¿Tiene la intención de almacenar datos decimales en un campo varchar? –
ypercube: mysql, InnoDB Tudor: no, solo texto ... a menos que el texto sea un número :) – RandomWhiteTrash