Tại sao bạn khai báo kích thước trường lớn hơn dữ liệu thực tế mà bạn đang mong đợi để lưu trữ trong đó?
Nếu phiên bản đầu tiên của ứng dụng của bạn sẽ hỗ trợ các địa chỉ Hoa Kỳ và Canada (mà tôi suy ra từ thực tế là bạn gọi ra các kích thước đó trong câu hỏi của mình), tôi sẽ khai báo trường là VARCHAR2 (9) (hoặc VARCHAR2 ( 10) nếu bạn định lưu trữ dấu gạch nối trong các trường ZIP + 4). Ngay cả khi xem xét các bài đăng mà những người khác đã thực hiện đối với mã bưu chính ở khắp các quốc gia, VARCHAR2 (9) hoặc VARCHAR2 (10) sẽ là đủ cho hầu hết các quốc gia khác.
Xuống dòng, bạn luôn có thể thay đổi cột để tăng chiều dài nếu cần. Nhưng nhìn chung rất khó để ngăn ai đó, ở đâu đó quyết định lấy "sáng tạo" và nhồi 50 ký tự vào trường VARCHAR2 (50) vì lý do này hay lý do khác (tức là vì họ muốn có một dòng khác trên nhãn vận chuyển). Bạn cũng phải đối phó với việc kiểm tra các trường hợp ranh giới (liệu mọi ứng dụng hiển thị ZIP sẽ xử lý 50 ký tự?). Và với thực tế là khi máy khách đang truy xuất dữ liệu từ cơ sở dữ liệu, họ thường cấp phát bộ nhớ dựa trên kích thước tối đa của dữ liệu sẽ được tìm nạp, không phải độ dài thực của một hàng nhất định. Có lẽ không phải là một vấn đề lớn trong trường hợp cụ thể này, nhưng 40 byte mỗi hàng có thể là một phần RAM phù hợp cho một số trường hợp.
Ngoài ra, bạn cũng có thể cân nhắc lưu trữ (ít nhất là đối với các địa chỉ ở Hoa Kỳ) mã ZIP và phần mở rộng +4 riêng biệt. Nhìn chung, rất hữu ích khi có thể tạo báo cáo theo khu vực địa lý và bạn có thể thường muốn đặt mọi thứ trong một mã ZIP với nhau hơn là chia nhỏ nó theo phần mở rộng +4. Tại thời điểm đó, sẽ hữu ích khi không phải cố gắng GỬI 5 ký tự đầu tiên cho mã ZIP.