Gdyby to był program C, poświęciłbym trochę czasu na przemyślenie tego. Ale z bazą danych zostawię ją silnikowi DB.
Programiści DB spędzili dużo czasu zastanawiając się nad najlepszym układem pamięci, więc po prostu powiedz tej bazie danych, czego potrzebujesz, i przechowuj dane w sposób najlepiej odpowiadający silnikowi bazy danych (zwykle).
Jeśli chcesz wyrównać swoje dane, musisz dokładnie wiedzy o wewnętrznej organizacji danych: Jak przechowywana jest ciąg? Jeden, dwa lub cztery bajty do przechowywania długości? Czy jest przechowywany jako sekwencja bajtów prostych lub zakodowanych w UTF-8 UTF-16 UTF-32? Czy baza danych wymaga dodatkowych bajtów do identyfikacji wartości NULL lub> MAXINT? Może ciąg jest przechowywany jako sekwencja bajtów zakończonych znakiem NUL - wtedy jeden bajt więcej jest potrzebny wewnętrznie.
Również z VARCHAR nie jest konieczne, aby DB zawsze przydzielał 100 (128) bajtów dla ciągu znaków. Może przechowuje tylko wskaźnik do miejsca, w którym znajdują się rzeczywiste dane.
Dlatego zdecydowanie zalecam używanie VARCHAR (100), jeśli jest to wymagane. Jeśli DB zdecyduje się go wyrównać, to jest też miejsce na dodatkowe wewnętrzne dane.
W inny sposób: Załóżmy, że używasz VARCHAR (128) i wszystkie elementy się łączą: DB przydziela 128 bajtów dla twoich danych. Dodatkowo potrzebuje 2 bajtów więcej, aby zapisać faktyczną długość ciągu znaków - tworzy 130 bajtów - i wtedy może być tak, że DB wyrównuje dane do następnej (powiedzmy 32 bajty) granicy: Rzeczywiste dane potrzebne na dysku to teraz 160 bajtów 8-}
Czy to pytanie dotyczy konkretnego RDBMS lub ogólnego? –
Czy zamierzasz przechowywać dane dziesiętne w polu varchar? –
ypercube: mysql, InnoDB Tudor: nie, tylko tekst ... chyba że tekst jest liczbą :) – RandomWhiteTrash