In MyISAM hat es einige Vorteile, Datensätze mit fester Breite zu erstellen. VARCHAR ist eine variable Breite. CHAR hat eine feste Breite. Wenn Ihre Zeilen nur Datentypen mit fester Breite haben, dann hat die gesamte Zeile eine feste Breite, und MySQL gewinnt einen gewissen Vorteil bei der Berechnung des Platzbedarfs und des Offsets von Zeilen in dieser Tabelle. Allerdings mag der Vorteil klein sein, und es ist kaum einen möglichen winzigen Gewinn wert, der durch andere Kosten (z. B. Cache-Effizienz) durch aufgefüllte CHAR-Spalten mit fester Breite aufgewogen wird, in denen VARCHAR kompakter speichern würde.
Der Haltepunkt, an dem es effizienter wird, hängt von Ihrer Anwendung ab, und dies kann nur dadurch beantwortet werden, dass Sie beide Lösungen testen und diejenige verwenden, die für Ihre Daten unter der Nutzung Ihrer Anwendung am besten geeignet ist.
In Bezug auf INT(7) gegenüber INT(11) ist dies für die Speicherung oder Leistung irrelevant. Es ist ein weit verbreitetes Missverständnis, dass das MySQL-Argument für den INT-Typ irgendetwas mit der Größe der Daten zu tun hat – das ist nicht der Fall. Der INT-Datentyp von MySQL ist immer 32 Bit. Das Argument in Klammern bezieht sich darauf, wie viele Stellen aufzufüllen sind, wenn Sie den Wert mit ZEROFILL anzeigen. Z.B. INT(7) zeigt 0001234 an, während INT(11) 00000001234 anzeigt. Diese Auffüllung erfolgt jedoch nur, wenn der Wert angezeigt wird, nicht während der Speicherung oder mathematischen Berechnung.