2009-09-29 12 views
14

Sto scrivendo un'applicazione Web, specifica per gli Stati Uniti, quindi il formato utilizzato da altri Paesi per i codici postali non è importante. Ho una lista di noi codici di avviamento postale che sto provando a caricare in una tabella di database che include ilTipo di dati Mysql per US Zip (codici postali)

  • 5 cifre ci CAP
  • latitudine
  • longitudine
  • codice di classificazione USPS
  • Stato codice
  • città

il codice postale è la chiave primaria in quanto è wha t sto interrogando contro. Ho iniziato a utilizzare un media int 5, ma questo tronca i codici postali che hanno zero iniziali.

Ho preso in considerazione l'utilizzo di un char5 ma sono preoccupato per il colpo di prestazioni dell'indicizzazione rispetto a una variabile char.

quindi la mia domanda è qual è il miglior tipo di dati mysql per memorizzare i codici postali come?

Nota: l'ho visto in molte altre domande relative ai codici postali. Mi interessano solo i codici postali statunitensi a 5 cifre. Quindi non è necessario prendere in considerazione formati di codice postale di altri paesi.

+3

Qual è il valore aggiunto per mantenere gli zeri iniziali? Finché visualizzi gli zeri iniziali (.PadLeft), manterrò il tuo database ottimizzato il più possibile. – JustLoren

+1

Gli zeri sono dati importanti in un codice postale. I codici postali sono * non * numeri interi, anche se sono costituiti interamente da numeri. – ceejayoz

+0

questo è un punto giusto. Ho fatto alcuni test case per richiedere 00210 ecc. e ho restituito il record corretto. Immagino che sia più un sentimento di preoccupazione per l'integrità dei dati. – gsueagle2008

risposta

24

char (5) è il modo corretto di andare. L'indicizzazione delle stringhe è abbastanza veloce, in particolare quando si tratta di un set di dati così piccolo.

È corretto in quanto non si dovrebbe mai usare un numero intero per un codice postale, poiché non si tratta veramente di dati numerici.

Modifica per aggiungere: Partenza questo per buone ragioni per cui non si utilizza i numeri per non numericamente importante di dati: Is it a good idea to use an integer column for storing US ZIP codes in a database?

+0

quali dati non numerici sono in un codice postale statunitense a 5 cifre? –

+1

Erich: Perché non un intero? Penserei che la memorizzazione come un intero aiuterebbe con il controllo dei tipi, è possibile aggiungere degli zeri iniziali nel client, un personaggio può essere un non-cifra ... Mi chiedo solo che punto mi manchi. – John

+0

Il set di dati potrebbe essere milioni. Molto probabilmente ci saranno altri indirizzi nel sistema in cui è memorizzato un file zip, e dovrebbero essere tutti dello stesso tipo. I codici postali –

2

andare con il vostro mezzo INT (5) ZEROFILL, dovrebbe aggiungere il leader zeri per te. Non c'è bisogno di influenzare l'indice e le prestazioni su un problema di formattazione.

+1

come char 5 ci sono voluti .0007 secondi come medint5 zerofill ci sono voluti .0006 secondi. Penso che entrambe siano soluzioni valide, ma penso che andrò con Char5 e proverò il leggero calo di prestazioni per un po 'più di tranquillità sul fronte dell'integrità dei dati. – gsueagle2008

1

Se lo fa Char (6), quindi può gestire anche i codici postali canadesi.

Se si considera che esiste un massimo di 100.000 codice postale a 5 cifre e quanto poco spazio occuperebbe anche se si è reso l'intero residente in memoria della tabella, non c'è motivo di non farlo.

+4

non ho bisogno di codici postali canadesi però. – gsueagle2008

+1

L'ho visto dal post originale. Ho appena immaginato di parlarne nel caso in cui qualcun altro guardasse questa domanda in futuro alla ricerca di un consiglio, ma avesse una situazione in cui i codici postali stranieri potrebbero fare la differenza. Il mio punto principale era che, nell'era delle chiavette di memoria gigabyte, un tavolo con codice postale è piuttosto piccolo. (Ho affrontato questi problemi quando la memoria è stata misurata in KILObytes) – David

Problemi correlati