2009-09-29 72 views
14

Tôi đang viết một ứng dụng web, cụ thể là ở Hoa Kỳ, do đó định dạng mà các quốc gia khác sử dụng cho mã bưu điện là không quan trọng. Tôi có một danh sách các mã zip chúng tôi biết rằng tôi đang cố gắng để nạp vào một bảng cơ sở dữ liệu bao gồm các chữ sốKiểu dữ liệu Mysql cho Mã Zip của Hoa Kỳ (Mã Bưu điện)

  • 5 chúng tôi mã bưu
  • longitude
  • mã phân loại usps
  • nhà nước đang
  • thành phố

mã zip là chìa khóa chính vì nó là wha Tôi sẽ truy vấn. tôi bắt đầu sử dụng phương tiện int 5 nhưng cắt ngắn mã zip có số 0 đứng đầu.

tôi đã xem xét việc sử dụng một ký tự char5 nhưng lo ngại về việc đạt được hiệu suất lập chỉ mục dựa trên biến char.

vì vậy câu hỏi của tôi là kiểu dữ liệu mysql tốt nhất để lưu trữ mã zip là gì?

Lưu ý: tôi đã thấy nó trong một số câu hỏi khác liên quan đến mã zip. Tôi chỉ quan tâm đến mã zip gồm 5 chữ số của Hoa Kỳ. Vì vậy, không cần phải xem xét các định dạng mã bưu điện của các quốc gia khác.

+3

Giá trị thêm vào việc giữ số 0 đứng đầu là gì? Vì vậy, miễn là bạn hiển thị các số 0 hàng đầu (.PadLeft), tôi sẽ giữ cho cơ sở dữ liệu của bạn được tối ưu hóa càng nhiều càng tốt. – JustLoren

+1

Các số 0 là dữ liệu quan trọng trong mã zip. Mã zip là * không * số nguyên, ngay cả khi chúng được tạo thành hoàn toàn bằng số. – ceejayoz

+0

thats một điểm công bằng. tôi đã làm một vài trường hợp thử nghiệm truy vấn cho 00210 vv và nó trả về hồ sơ thích hợp. tôi đoán nó có nhiều cảm giác về mối quan tâm về tính toàn vẹn của dữ liệu. – gsueagle2008

Trả lời

24

char (5) là cách chính xác để thực hiện. Việc lập chỉ mục chuỗi khá nhanh, đặc biệt khi nó là một tập dữ liệu nhỏ.

Bạn chính xác ở chỗ bạn không bao giờ nên sử dụng số nguyên cho mã zip vì nó không thực sự là dữ liệu số.

Chỉnh sửa để thêm: Check-out này vì lý do chính đáng tại sao bạn không sử dụng số cho dữ liệu phi số lượng quan trọng: Is it a good idea to use an integer column for storing US ZIP codes in a database?

+0

dữ liệu không phải là số trong mã zip gồm 5 chữ số của Hoa Kỳ? –

+1

Erich: Tại sao không phải là số nguyên? Tôi sẽ nghĩ rằng lưu trữ như một số nguyên sẽ giúp kiểm tra loại, bạn có thể thêm zeroes hàng đầu trong khách hàng, một nhân vật có thể là một số không ... Chỉ cần tự hỏi những gì tôi đang thiếu. – John

+0

Tập dữ liệu có thể là hàng triệu. Nhiều khả năng sẽ có các địa chỉ khác trong hệ thống nơi lưu trữ mã zip và tất cả chúng phải cùng loại –

2

đi với trung INT của bạn (5) ZEROFILL, cần thêm hàng đầu số không cho bạn. Không cần phải tác động đến chỉ mục và hiệu suất trên một vấn đề định dạng.

+1

là một số 5 mất khoảng 0,0007 giây trong thời gian medint5 zerofill mất 0,0006 giây. tôi nghĩ rằng cả hai đều là giải pháp hợp lệ, nhưng tôi nghĩ rằng tôi sẽ đi với char5 và có hiệu suất nhỏ hit cho một chút yên tâm hơn về mặt trước toàn vẹn dữ liệu. – gsueagle2008

1

Nếu anh ta làm cho nó Char (6), sau đó ông có thể xử lý mã bưu chính Canada là tốt.

Khi bạn xem xét rằng có tối đa 100.000 mã gồm 5 chữ số và không gian nhỏ sẽ mất bao nhiêu ngay cả khi bạn tạo toàn bộ bộ nhớ của bảng, không có lý do gì để không.

+4

Tôi không cần mã bưu điện của Canada. – gsueagle2008

+1

Tôi thấy rằng từ bài đăng gốc. Tôi chỉ nghĩ rằng tôi sẽ đề cập đến nó trong trường hợp bất cứ ai khác nhìn vào câu hỏi này trong tương lai tìm kiếm lời khuyên nhưng đã có một tình huống mà mã bưu chính nước ngoài MIGHT tạo sự khác biệt. Điểm chính của tôi là, trong độ tuổi của bộ nhớ gigabyte, một bảng mã zip là khá nhỏ. (Tôi xử lý những điều này khi bộ nhớ được đo bằng KILObytes) – David

Các vấn đề liên quan