Từ cái nhìn đầu tiên, nó sẽ xuất hiện tôi có hai lựa chọn cơ bản để lưu trữ ZIP codes trong một bảng cơ sở dữ liệu:Bạn có nên 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?
- Text (có lẽ là phổ biến nhất), tức là
char(5)
hoặcvarchar(9)
để hỗ trợ 4 phần mở rộng - Numeric, tức là Số nguyên 32 bit
Cả hai đều đáp ứng các yêu cầu của dữ liệu, nếu chúng tôi cho rằng không có mối quan tâm quốc tế. Trong quá khứ chúng tôi thường chỉ đi theo con đường văn bản, nhưng tôi đã tự hỏi nếu có ai làm ngược lại? Chỉ cần so sánh ngắn gọn, có vẻ như phương pháp số nguyên có hai ưu điểm rõ ràng:
- Đó là, tự nhiên, chỉ giới hạn ở số học (trong khi không xác thực kiểu văn bản có thể lưu trữ chữ cái và chữ cái không theo kiến thức của tôi, có giá trị trong mã ZIP). Điều này không có nghĩa là chúng tôi có thể/sẽ/nên bỏ qua xác nhận đầu vào người dùng như bình thường, mặc dù!
- Mất ít không gian hơn, là 4 byte (cần nhiều ngay cả đối với mã ZIP gồm 9 chữ số) thay vì 5 hoặc 9 byte.
Ngoài ra, có vẻ như nó sẽ không làm hỏng hiển thị nhiều đầu ra. Nó là tầm thường để tát một ToString()
trên một giá trị số, sử dụng thao tác chuỗi đơn giản để chèn dấu nối hoặc dấu cách hoặc bất kỳ phần mở rộng +4 nào và sử dụng định dạng chuỗi để khôi phục số 0 đầu.
Có điều gì sẽ ngăn cản việc sử dụng int
làm kiểu dữ liệu cho mã ZIP chỉ dành cho Hoa Kỳ không?
Tôi có thể thề đây là số nhiều lần, nhưng tôi có gặp khó khăn khi tìm kiếm chúng ... – rmeador
@rmeador: http://stackoverflow.com/questions/310540/best-practices-for-storing-postal-addresses-in-a-database-rdbms rất giống nhau, trong khi http://stackoverflow.com/questions/747802/integer-vs-string-in-database cũng đề cập đến chủ đề. – Shog9
Tát ToString trên là một lỗi đang chờ xảy ra: nếu 00001 trở thành mã zip thì sao? Sau đó, bạn không thể nói giữa 10001 và 00001-0001. – Mark