2008-11-28 8 views
75

Ich erwarte, dass die Spalte ein VARCHAR2 in meiner Oracle-Datenbank ist.Ich muss Postleitzahlen in einer Datenbank speichern. Wie groß sollte die Säule sein?

US Zips sind 9.

Canadian 7.

ist ich 32 Zeichen denke wäre vernünftige Obergrenze

Was bin ich fehlt?

[EDIT] TIL: 12 ist eine vernünftige Antwort auf die Frage Danke an alle, die dazu beigetragen haben.

+2

Nach http: //en.wikipedia .org/wiki/List_of_postal_codes, die längste ist 12 Zeichen, wenn Sie das '-' speichern, sonst 11 –

+0

Nützlicher Link, aber die Genauigkeit ist vielleicht ein bisschen out. EG listet australische Postleitzahlen als 7 Zeichen auf, obwohl sie tatsächlich 4 sind. Ref: http://en.wikipedia.org/wiki/Postcodes_in_Australia und die Postleitzahl-Liste, die unter http://www1.auspost.com.au verfügbar ist/Postleitzahlen /. – rossp

+0

re: mein vorheriger Kommentar - das bedeutet nicht, dass diese Liste nicht als Leitfaden nützlich ist. Wenn man davon ausgeht, dass sich die Liste auf der Seite längerer Postleitzahlen befindet, beträgt die längste Länge 9 Zeichen, sodass 16 Zeichen oder mehr ausreichend Platz zum Atmen bieten. – rossp

Antwort

2

kanadische Postleitzahlen sind nur 6 Zeichen in Form von Brief und Zahlen (LNLNLN)

+3

Kanadische Postleitzahlen haben ein Leerzeichen in der Mitte "ANA NAN" Das sind 7 Zeichen. – EvilTeach

+1

Aber der Platz ist immer in der Mitte, also müssen Sie ihn nicht speichern. –

+0

@EvilTeach - Ja, aber Sie können erwarten, dass die Daten normalisiert werden, bevor sie gespeichert werden. – ysth

33

Skimming durch Wikipedia's Postal Codes page, 32 Zeichen sollten mehr als genug sein. Ich würde sagen, dass sogar 16 Zeichen gut sind.

+3

Gute Verbindung. Selbst wenn man die Interpunktion in US ZIP + 4 zulässt, würden 10 Zeichen für jedes Land ausreichen, soweit ich das beurteilen könnte. –

+0

Basierend auf diesem Link, von der oben verlinkten Seite, würde ich mit 18 gehen, um Länder wie Chile unterzubringen: https://en.wikipedia.org/wiki/List_of_postal_codes – mopo922

+1

Chile ist 7 Zeichen. Die von Ihnen referenzierte Webseite zeigt einfach Interpunktionsvarianz. – EvilTeach

3

Was Sie vermissen ist ein Grund, warum Sie die Postleitzahl speziell behandelt werden müssen.

Wenn Sie nicht wirklich WORK mit einer Postleitzahl benötigen, würde ich vorschlagen, sich keine Sorgen zu machen. Mit der Arbeit meine ich eine spezielle Verarbeitung, anstatt nur Adress-Etiketten zu drucken und so weiter.

Erstellen Sie einfach drei oder vier Adressfelder von VARCHAR2 (50) [zum Beispiel] und lassen Sie den Benutzer eingeben, was sie wollen.

Haben Sie wirklich müssen Ihre Bestellungen oder Transaktionen nach Postleitzahl gruppieren? Ich denke nicht, da die verschiedenen Länder für diesen Bereich sehr unterschiedliche Systeme haben.

+0

Ich stimme zu. Mit einem VARCHAR2 Feld ist die Realität für ein Feld wie Postleitzahl wirklich egal. Etwas zu groß ist besser als ein Kunde zu ärgern, weil sie ihre Details nicht eingeben können. –

+0

Und varchars sind praktisch, da Datenbanken (mindestens DB2) ihre Speicherung optimieren können, um keinen Speicherplatz zu verschwenden. – paxdiablo

+1

würde man darauf hinweisen, dass die Sortierung nach Land und Postleitzahl an manchen Orten zu günstigeren Postgebühren führt. – EvilTeach

3

Normalisierung? Postleitzahlen werden möglicherweise mehrmals verwendet und können sich auf Straßennamen oder Stadtnamen beziehen. Separate Tabelle (n).

+0

Interessant. Ein anderer Standpunkt wurde einfach ohne Grund verneint. +1 – EvilTeach

+0

Eine Postleitzahl verweist normalerweise auf einen Block auf einer Straßenseite. Um eine größere Region zu finden, wählen Sie die erste Hälfte der Postleitzahl. Diese Informationen in einer separaten Tabelle zu haben, wird wirklich nichts helfen und wäre komplizierter zu warten. – RevNoah

+1

@EvilTeach: Ich wette, es wurde wegen seines Off-Topic Downvoted. Erzählst du, wie groß eine Spalte sein sollte, um jede mögliche Postleitzahl in der Welt zu speichern? Nr. – wmax

10

Warum würden Sie eine Feldgröße deklarieren, die größer ist als die eigentlichen Daten, die Sie darin speichern möchten?

Wenn die ursprüngliche Version Ihrer Anwendung US- und kanadische Adressen unterstützt (was ich aus der Tatsache ableiten kann, dass Sie diese Größen in Ihrer Frage aufrufen), würde ich das Feld als VARCHAR2 deklarieren (9) (oder VARCHAR2 (10), wenn Sie den Bindestrich in ZIP + 4 Feldern speichern möchten). Selbst wenn man sich die Postsendungen anderer Länder an Postleitzahlen anschaut, würde VARCHAR2 (9) oder VARCHAR2 (10) für die meisten, wenn nicht für alle anderen Länder ausreichen.

Auf der ganzen Linie können Sie immer die Spalte ändern, um die Länge zu erhöhen, sollte dies erforderlich sein. Aber es ist im Allgemeinen schwer zu verhindern, dass jemand irgendwo aus dem einen oder anderen Grund beschließt, "kreativ" zu werden und 50 Zeichen in ein VARCHAR2 (50) -Feld zu stopfen (d. H., Weil sie eine andere Zeile auf einem Versandetikett haben wollen). Sie müssen sich auch mit dem Testen der Grenzfälle befassen (wird jede Anwendung, die ein ZIP-Handle anzeigt, 50 Zeichen haben?). Und mit der Tatsache, dass Clients, wenn sie Daten aus der Datenbank abrufen, im Allgemeinen Speicher basierend auf der maximalen Größe der Daten, die abgerufen werden, und nicht der tatsächlichen Länge einer gegebenen Zeile zuweisen. Wahrscheinlich keine große Sache in diesem speziellen Fall, aber 40 Bytes pro Zeile könnte für einige Situationen ein anständiger Stück RAM sein.

Nebenbei bemerkt, könnten Sie auch die Postleitzahl und die Erweiterung +4 separat speichern (zumindest für US-Adressen).Es ist im Allgemeinen nützlich, Berichte nach geografischen Regionen erstellen zu können. Häufig möchten Sie alle Daten in einer Postleitzahl zusammenfassen, anstatt sie durch die Erweiterung +4 zu trennen. An diesem Punkt ist es nützlich, nicht versuchen zu müssen, die ersten 5 Zeichen für die Postleitzahl auszusortieren.

+3

Nun, vorausgesetzt, dass wir in etwas dummes wie Pro * C codieren, das Feld groß genug für Wachstum zu haben bedeutet, dass der Code nicht berührt werden muss, sollte die Nutzung zunehmen. – EvilTeach

+0

Ja, die Postleitzahl in 5 und 4 Ziffern zu brechen kann sinnvoll sein, je nachdem, wofür Sie sie verwenden. Zum Beispiel, wenn Sie eine Art von Adressabgleich tun, möchten Sie möglicherweise auf der Zip5 zuerst übereinstimmen, und lösen ambiguous Situationen mit der Zip 9. Es hilft auch, einen Ländercode zu verwenden – EvilTeach

1

Wenn Sie Postleitzahlen in die Datenbank integrieren möchten, ist die Geonames-Datenbank am besten zu verwenden. Auch wenn es schwer zu verwenden und zu verstehen ist, ist es doch die größte geografische Datenbank, die Nutzern wie uns kostenlos zur Verfügung steht.

Alle anderen solche Datenbank sind mehr oder weniger wahrscheinlich haben die gleiche Daten und Struktur. Sie entfernen nur einige zusätzliche/redundante Informationen aus der Datenbank. Wenn Sie nur für Low-Load-Systeme tun, nutzen Sie ihre kostenlosen Dienste die Grenzen sind attraktiv und bietet eine einfachere Schnittstelle mit JSON und AJAX. Sie können here

Zu Ihrer Information varchar die Grenzen sehen (20) genügt, um @ neil-mcguigan Postleitzahlen

16

Wie bereits angehoben speichern, hat wikipedia eine anständige Seite zum Thema. Basierend auf diesem 12 Zeichen sollte es tun: http://en.wikipedia.org/wiki/List_of_postal_codes

Der Wikipedia-Artikel listet ~ 254 Länder, die ziemlich gut in Bezug auf UPU (Universal Postal Union) hat 192 Mitgliedsländer.

+2

Sieht so aus, Montserrat hat 13 Zeichen, Beispiel gegeben als "MSR 1110-1350", in der oben geteilten Verbindung. –

+0

Beachten Sie, dass Montserrat nur 8 Zeichen, 1110-1350 eine Reichweite angibt. https://discovermni.com/about-montserrat/montserrat-post-codes/ –

+0

Möglicherweise Wikipedia benötigt Bearbeitung, da die ähnlich aussehende Postleitzahl für Malta eine generische wie "AAA NNNN" hat. Es würde mir nichts ausmachen, auch nur 15 Zeichen zu haben, da es später nur weniger Probleme gibt, wenn wir die Spaltenlänge anpassen müssen, auch bei richtiger Verwendung von Datentypen sollte es nicht alle 15 Zeichen enthalten (möglicherweise varchar oder nvarchar oder like?) . –

0

UK veröffentlicht Standards: UK Government Data Standards Catalogue

Max 35 characters per line 

Internationale Postanschrift:

Minimum of 2 lines and maximum of 5 lines for the postal delivery point 
details, plus 1 line for country and 1 line for postcode/zip code 

Die britische Postleitzahl Länge:

Minimum 6 and Maximum 8 characters