2009-09-29 91 views
14

Estoy escribiendo una aplicación web, que es específica de EE. UU., Por lo que el formato que otros países usan para los códigos postales no es importante. Tengo una lista de los Estados Unidos códigos postales que estoy tratando de cargar en una tabla de base de datos que incluye el dígitoTipo de datos Mysql para código postal de EE. UU. (Códigos postales)

  • 5 nos Código Postal
  • latitud
  • longitud
  • código de clasificación USPS estado
  • código
  • ciudad

el código postal es la clave principal ya que es wha voy a consultar en contra. Empecé a usar un int int 5 pero eso trunca los códigos postales que tienen ceros a la izquierda.

consideré el uso de un char5 pero me preocupa el impacto en el rendimiento de la indexación frente a una variable char.

así que mi pregunta es ¿cuál es el mejor tipo de datos mysql para almacenar códigos postales como?

Nota: lo he visto en varias otras preguntas relacionadas con los códigos postales. Solo me interesan los códigos postales de 5 dígitos de EE. UU. Por lo tanto, no es necesario tener en cuenta los formatos de códigos postales de otros países.

+3

¿Cuál es el valor añadido para mantener los ceros a la izquierda? Siempre que muestre los ceros a la izquierda (.PadLeft), mantendré su base de datos optimizada en la medida de lo posible. – JustLoren

+1

Los ceros son datos importantes en un código postal. Los códigos postales son * no * enteros, incluso si están formados por números. – ceejayoz

+0

ese es un buen punto. Hice algunos casos de prueba preguntando por 00210 etc. y devolvió el registro correcto. Supongo que es más una intuición acerca de las preocupaciones por la integridad de los datos. – gsueagle2008

Respuesta

24

char (5) es la forma correcta de hacerlo. La indexación de cadenas es bastante rápida, particularmente cuando se trata de un conjunto de datos tan pequeño.

Tiene razón en que nunca debe usar un número entero para un código postal, ya que no se trata realmente de datos numéricos.

Editar para añadir: Salida esto por buenas razones por las que no utiliza números para no numéricamente importantes datos: Is it a good idea to use an integer column for storing US ZIP codes in a database?

+0

¿Qué datos no numéricos hay en un código postal de 5 dígitos de EE. UU.? –

+1

Erich: ¿Por qué no un número entero? Pensaría que almacenar como un entero ayudaría con la verificación de tipos, puede agregar ceros a la izquierda en el cliente, un personaje puede no ser un dígito ... Me pregunto qué punto me falta. – John

+0

El conjunto de datos podría ser millones. Lo más probable es que existan otras direcciones en el sistema donde se almacena un archivo zip, y todas deben ser del mismo tipo –

2

ir con su medio INT (5) ZEROFILL, se debe añadir el líder ceros para ti No es necesario que afecte el índice y el rendimiento en un problema de formato.

+1

como char 5 tomó .0007 segundos como medint5 zerofill tomó .0006 segundos. Creo que ambas son soluciones válidas, pero creo que voy a ir con char5 y tomaré el ligero golpe de rendimiento para tener un poco más de tranquilidad en el frente de integridad de datos. – gsueagle2008

1

Si lo hace Char (6), entonces también puede manejar códigos postales canadienses.

Si considera que hay un máximo de 100.000 código postal de 5 dígitos y qué tan poco espacio ocuparía, incluso si ha hecho que toda la tabla resida en la memoria, no hay razón para no hacerlo.

+4

No tengo necesidad de códigos postales canadienses. – gsueagle2008

+1

Lo vi desde la publicación original. Pensé que lo mencionaría en caso de que alguien más mirase esta pregunta en el futuro en busca de consejo, pero tenía una situación en la que los códigos postales extranjeros PODRÍAN hacer la diferencia. Mi punto principal fue que, en la era de los gigabytes de memoria, una tabla de códigos postales es bastante pequeña. (He tratado esto cuando la memoria se midió en kilobytes) – David

Cuestiones relacionadas