Mengapa Anda menyatakan ukuran bidang lebih besar dari data sebenarnya yang ingin Anda simpan di dalamnya?
Jika versi awal aplikasi Anda akan mendukung alamat AS dan Kanada (yang saya simpulkan dari fakta bahwa Anda menyebutkan ukuran tersebut dalam pertanyaan Anda), saya akan mendeklarasikan bidang tersebut sebagai VARCHAR2 (9) (atau VARCHAR2 ( 10) jika Anda ingin menyimpan tanda hubung di kolom ZIP + 4). Bahkan melihat kiriman yang dibuat orang lain pada kode pos di berbagai negara, VARCHAR2 (9) atau VARCHAR2 (10) akan cukup untuk sebagian besar, jika tidak semua negara lain.
Selanjutnya, Anda selalu dapat MENGUBAH kolom untuk menambah panjang jika diperlukan. Tetapi secara umum sulit untuk mencegah seseorang, entah di mana, memutuskan untuk menjadi "kreatif" dan memasukkan 50 karakter ke dalam bidang VARCHAR2 (50) karena satu dan lain alasan (yaitu karena mereka menginginkan baris lain pada label pengiriman). Anda juga harus berurusan dengan pengujian kasus batas (akankah setiap aplikasi yang menampilkan ZIP menangani 50 karakter?). Dan dengan fakta bahwa saat klien mengambil data dari database, mereka umumnya mengalokasikan memori berdasarkan ukuran maksimum data yang akan diambil, bukan panjang sebenarnya dari baris tertentu. Mungkin bukan masalah besar dalam kasus khusus ini, tetapi 40 byte per baris bisa menjadi potongan RAM yang layak untuk beberapa situasi.
Selain itu, Anda juga dapat mempertimbangkan untuk menyimpan (setidaknya untuk alamat AS) kode pos dan ekstensi +4 secara terpisah. Secara umum berguna untuk dapat menghasilkan laporan menurut wilayah geografis, dan Anda mungkin sering ingin memasukkan semuanya ke dalam kode ZIP daripada memecahnya dengan ekstensi +4. Pada tahap ini, sebaiknya Anda tidak mencoba SUBSTR 5 karakter pertama untuk kode pos.