2013-04-05 13 views
6

Voglio memorizzare Codice postale (all'interno degli Stati Uniti) nel database MySQL. Il salvataggio dello spazio è prioritario. quale è l'opzione migliore usando VARCHAR - limitato alla lunghezza massima di 6 cifre o usando INT o usando MEDIUM Int. Il codice postale non verrà utilizzato per nessun calcolo. Il codice postale verrà utilizzato per inserire (Una volta), Aggiornato (se richiesto) e Recupero - Una volta (ma può essere più di una volta).Qual è il miglior tipo di colonna per un codice postale degli Stati Uniti?

Quale è l'opzione migliore da utilizzare qui VARCHAR o INT o MEDIUM IN MYSQL? Si prega di suggerire qualcos'altro?

+0

possibile duplicato di [È una buona idea utilizzare una colonna di numeri interi per archiviare codici postali statunitensi in un database?] (Http://stackoverflow.com/questions/893454/is-it-a-good-idea- usare-un-intero-colonna-per-immagazzinare-US-zip-codes-in-a-databas) – Taryn

risposta

12

Ci sono alcuni problemi con la memorizzazione di un codice postale come valore numerico.

  1. I codici postali hanno estensioni, ovvero possono essere 12345-6789. Non è possibile memorizzare un trattino in un tipo di dati numerico.
  2. Ci sono molti codici postali che iniziano con uno zero, se lo memorizzi come un int che perderai lo zero iniziale.
  3. Non aggiungere/sottrarre, ecc. I codici di avviamento postale o utilizzare funzioni numeriche con essi.

Vorrei memorizzare un codice postale come varchar(5) o varchar(10).

Come nota a margine, non sono sicuro del perché dovresti selezionare varchar(6), hai un motivo per selezionare una lunghezza insolita quando i codici postali standard sono 5 o 10 con l'estensione?

4

Io di solito uso MEDIUMINT(5) ZEROFILL per codici postali a 5 cifre. Ciò preserva tutti gli 0 principali e utilizza solo 3 byte in cui un VARCHAR(5) utilizza 6. Ciò presuppone che non siano necessari i codici postali estesi, che dispongono di un trattino e di 4 numeri aggiuntivi. Se dovessi decidere di utilizzare un tipo testuale, utilizzerei CHAR(5) anziché VARCHAR(5) poiché è preferibile che i dati siano sempre lunghi 5 caratteri.

3

I codici postali sono sempre 5 caratteri, quindi è necessario un tipo di dati CHAR, anziché VARCHAR.

Le opzioni sono quindi

CHAR(5) 

MEDIUMINT (5) UNSIGNED ZEROFILL 

Il primo si 5 byte per codice postale.

Il secondo richiede solo 3 byte per codice di avviamento postale. L'opzione ZEROFILL è necessaria per i codici postali con zero iniziali.

Quindi, se lo spazio è la priorità, utilizzare MEDIUMINT.

1

Vorrei suggerire, utilizzare il tipo di dati VARCHAR perché in alcuni paesi i codici postali vengono utilizzati come alfanumerici e in altri luoghi come numeri interi. Quindi non possiamo usare un numero intero per l'uso globale. Inoltre, il codice postale può iniziare con zero come 001101 quindi, in questo caso, se prendiamo il numero intero dei dati, lo zero iniziale andrà perso, quindi non possiamo passare il codice postale effettivo.