2009-09-29 11 views
14

Ich schreibe eine Webanwendung, die US-spezifisch ist, so dass das Format, das andere Länder für Postleitzahlen verwenden, nicht wichtig ist. Ich habe eine Liste von uns Postleitzahlen, die ich, dass dieMysql-Datentyp für US-Postleitzahl (Postleitzahlen)

  • 5 Ziffer uns die Postleitzahl
  • Länge
  • USPS Klassifizierungscode
  • Breite
  • Zustand enthält versuchen in eine Datenbanktabelle zu laden Code
  • Stadt

die Postleitzahl ist der Primärschlüssel wie es wha ist t ich werde abfragen. Ich fing an, ein Medium int 5 zu benutzen, aber das schneidet die Postleitzahlen ab, die führende Nullen haben.

Ich dachte über die Verwendung eines char5, bin aber besorgt über den Leistungseinbruch der Indizierung gegen eine Char-Variable.

so ist meine Frage, was ist der beste mysql-Datentyp zum Speichern von Postleitzahlen als?

Hinweis: Ich habe es in mehreren anderen Fragen im Zusammenhang mit Postleitzahlen gesehen. Ich bin nur an US 5-stelligen Postleitzahlen interessiert. Daher müssen die Postleitzahlenformate anderer Länder nicht berücksichtigt werden.

+3

Was ist der Mehrwert, wenn die führenden Nullen beibehalten werden? Solange Sie die führenden Nullen (.PadLeft) anzeigen, würde ich Ihre Datenbank so weit wie möglich optimieren. – JustLoren

+1

Die Nullen sind wichtige Daten in einer Postleitzahl. Postleitzahlen sind * keine * ganzen Zahlen, auch wenn sie nur aus Zahlen bestehen. – ceejayoz

+0

das ist ein fairer Punkt. Ich habe ein paar Testfälle für 00210 usw. abgefragt und es hat den richtigen Datensatz zurückgegeben. Ich denke, es ist mehr ein Bauchgefühl über Bedenken hinsichtlich der Datenintegrität. – gsueagle2008

Antwort

24

char (5) ist der richtige Weg zu gehen. String-Indizierung ist ziemlich schnell, insbesondere wenn es sich um einen so kleinen Datensatz handelt.

Sie haben Recht, dass Sie nie eine ganze Zahl für eine Postleitzahl verwenden sollten, da es sich nicht wirklich um numerische Daten handelt.

bearbeiten hinzuzufügen: Schauen Sie sich diese für eine gute Gründe, warum Sie für nicht-numerisch wichtige Daten nicht Nummern: Is it a good idea to use an integer column for storing US ZIP codes in a database?

+0

Welche nicht-numerischen Daten befinden sich in einer 5-stelligen US-Postleitzahl? –

+1

Erich: Warum nicht eine ganze Zahl? Ich würde denken, dass die Speicherung als Ganzzahl bei der Typprüfung helfen würde, Sie können führende Nullen im Client hinzufügen, ein Zeichen kann eine Nicht-Ziffer sein ... Ich frage mich nur, welchen Punkt ich vermisse. – John

+0

Der Datensatz könnte Millionen betragen. Höchstwahrscheinlich gibt es im System weitere Adressen, in denen eine Zip-Datei gespeichert ist, und alle sollten denselben Typ haben. –

2

mit Ihrem Medium INT gehen (5) ZEROFILL, sollte es die führende hinzufügen Nullen für dich. Keine Notwendigkeit, den Index und die Leistung bei einem Formatierungsproblem zu beeinflussen.

+1

als char 5 dauerte es .0007 Sekunden als medint5 zerofill es dauerte .0006 Sekunden. Ich denke, beide sind gültige Lösungen, aber ich denke, ich werde mit char5 gehen und den leichten Leistungseinbruch für ein wenig mehr Ruhe auf der Datenintegrität Front nehmen. – gsueagle2008

1

Wenn er es Char (6) macht, kann er auch kanadische Postleitzahlen verarbeiten.

Wenn Sie bedenken, dass es maximal 100.000 5-stellige Postleitzahlen gibt und wie wenig Platz sie einnehmen würden, selbst wenn Sie die gesamte Tabelle speicherresident gemacht hätten, gibt es keinen Grund dafür.

+4

Ich brauche jedoch keine kanadischen Postleitzahlen. – gsueagle2008

+1

Ich sah das von der ursprünglichen Post. Ich dachte mir nur, dass ich es erwähnen würde, falls jemand diese Frage in der Zukunft nach Rat fragen würde, aber eine Situation hätte, wo ausländische Postleitzahlen einen Unterschied machen könnten. Mein Hauptpunkt war, dass im Zeitalter von Gigabyte-Memory-Sticks eine Postleitzahl-Tabelle ziemlich klein ist. (Ich behandelte diese, wenn die Erinnerung in KILObytes gemessen wurde) – David

Verwandte Themen