Warum sollten Sie ein Feld deklarieren, das größer ist als die tatsächlichen Daten, die Sie voraussichtlich darin speichern werden?
Wenn die ursprüngliche Version Ihrer Anwendung US- und kanadische Adressen unterstützt (was ich aus der Tatsache ableite, dass Sie diese Größen in Ihrer Frage angeben), würde ich das Feld als VARCHAR2 (9) (oder VARCHAR2 () deklarieren. 10) wenn Sie den Bindestrich in ZIP + 4-Feldern speichern möchten). Selbst wenn man sich die Beiträge anderer Länder zu Postleitzahlen in verschiedenen Ländern ansieht, würde VARCHAR2 (9) oder VARCHAR2 (10) für die meisten, wenn nicht alle anderen Länder ausreichen.
In der Folge können Sie die Spalte jederzeit ÄNDERN, um die Länge zu erhöhen, falls dies erforderlich sein sollte. Aber es ist im Allgemeinen schwer zu verhindern, dass sich jemand aus irgendeinem Grund dafür entscheidet, "kreativ" zu werden und 50 Zeichen in ein VARCHAR2 (50) -Feld zu stecken (dh weil er eine andere Zeile auf einem Versandetikett haben möchte). Sie müssen sich auch mit dem Testen der Grenzfälle befassen (wird jede Anwendung, die eine Postleitzahl anzeigt, 50 Zeichen verarbeiten?). Und mit der Tatsache, dass Clients beim Abrufen von Daten aus der Datenbank im Allgemeinen Speicher basierend auf der maximalen Größe der abzurufenden Daten und nicht auf der tatsächlichen Länge einer bestimmten Zeile zuweisen. In diesem speziellen Fall wahrscheinlich keine große Sache, aber 40 Bytes pro Zeile könnten in manchen Situationen ein anständiger Teil des Arbeitsspeichers sein.
Nebenbei können Sie auch in Betracht ziehen, die Postleitzahl und die + 4-Erweiterung (zumindest für US-Adressen) separat zu speichern. Es ist im Allgemeinen nützlich, Berichte nach geografischen Regionen erstellen zu können, und Sie möchten häufig alles in einer Postleitzahl zusammenfassen, anstatt es nach der Erweiterung +4 aufzuschlüsseln. An diesem Punkt ist es nützlich, nicht versuchen zu müssen, die ersten 5 Zeichen für die Postleitzahl zu SUBSTREN.