2013-04-05 32 views
6

Tôi muốn lưu trữ Mã Zip (trong phạm vi Hoa Kỳ) trong cơ sở dữ liệu MySQL. Tiết kiệm không gian là ưu tiên. đó là lựa chọn tốt hơn bằng cách sử dụng VARCHAR - giới hạn chiều dài tối đa là 6 chữ số hoặc sử dụng INT hoặc sử dụng MEDIUM Int. Mã Zip sẽ không được sử dụng cho bất kỳ phép tính nào. Mã Zip sẽ được sử dụng để chèn (một lần), cập nhật (nếu cần) và truy xuất - một lần (nhưng nó có thể nhiều hơn một lần).Loại cột tốt nhất cho mã bưu điện Hoa Kỳ là gì?

Lựa chọn nào tốt hơn để sử dụng ở đây VARCHAR hoặc INT hoặc MEDIUM trong MYSQL? Xin đề nghị bất cứ điều gì khác?

+0

có thể trùng lặp của [Sử dụng cột số nguyên để lưu trữ mã ZIP của Hoa Kỳ trong cơ sở dữ liệu không?] (Http://stackoverflow.com/questions/893454/is-it-a-good-idea- sử dụng-một-số nguyên-cột-cho-lưu-chúng-----------databas) – Taryn

Trả lời

12

Có một số vấn đề với việc lưu trữ mã zip dưới dạng giá trị số.

  1. Mã zip có phần mở rộng, có nghĩa là chúng có thể là 12345-6789. Bạn không thể lưu một dấu gạch ngang trong một kiểu dữ liệu số.
  2. Có nhiều mã zip bắt đầu bằng số không, nếu bạn lưu nó dưới dạng int, bạn sẽ mất số 0 đứng đầu.
  3. Bạn không thêm/trừ, vv mã zip hoặc sử dụng các hàm số với chúng.

Tôi sẽ lưu trữ mã zip dưới dạng varchar(5) hoặc varchar(10).

Lưu ý, tôi không chắc tại sao bạn chọn varchar(6), bạn có lý do chọn độ dài bất thường khi mã zip chuẩn là 5 hoặc 10 với phần mở rộng không?

4

Tôi thường sử dụng MEDIUMINT(5) ZEROFILL cho mã zip gồm 5 chữ số. Điều này bảo tồn bất kỳ hàng đầu 0 s và nó chỉ sử dụng 3 byte, nơi một VARCHAR(5) sẽ sử dụng 6. Điều này giả định rằng bạn không cần mã zip mở rộng, trong đó có một dấu gạch ngang và 4 số phụ. Nếu bạn quyết định sử dụng loại văn bản, tôi sẽ sử dụng CHAR(5) thay vì VARCHAR(5) vì nó tốt hơn nếu dữ liệu luôn dài 5 ký tự.

3

Mã zip luôn là 5 ký tự, do đó bạn sẽ cần một kiểu dữ liệu CHAR, chứ không phải VARCHAR.

lựa chọn của bạn là do

CHAR(5) 

MEDIUMINT (5) UNSIGNED ZEROFILL 

Đầu tiên mất 5 byte cho mỗi mã bưu điện.

Thứ hai chỉ mất 3 byte cho mỗi mã zip. Tùy chọn ZEROFILL là cần thiết cho mã zip có số 0 đứng đầu.

Vì vậy, nếu không gian là ưu tiên của bạn, hãy sử dụng MEDIUMINT.

1

Tôi khuyên bạn nên sử dụng loại dữ liệu VARCHAR vì ở một số quốc gia mã zip được sử dụng dưới dạng chữ và số và ở những nơi khác làm số nguyên. Vì vậy, chúng tôi không thể sử dụng một số nguyên để sử dụng toàn cầu. Ngoài ra, mã zip có thể bắt đầu bằng không như 001101 vì vậy trong trường hợp này, nếu chúng ta lấy số nguyên kiểu dữ liệu thì số không đầu sẽ bị mất để chúng tôi không thể chuyển mã zip thực.