Зачем объявлять размер поля больше, чем фактические данные, которые вы ожидаете в нем хранить?
Если первоначальная версия вашего приложения будет поддерживать адреса в США и Канаде (что я делаю вывод из того факта, что вы указываете эти размеры в своем вопросе), я бы объявил поле как VARCHAR2 (9) (или VARCHAR2 ( 10) если вы собираетесь хранить дефис в полях ZIP + 4). Даже если посмотреть на сообщения о почтовых индексах других стран, VARCHAR2 (9) или VARCHAR2 (10) будет достаточным для большинства, если не для всех других стран.
Внизу строки вы всегда можете ИЗМЕНИТЬ столбец, чтобы увеличить длину, если возникнет такая необходимость. Но, как правило, трудно помешать кому-то где-нибудь проявить «творческий подход» и заполнить 50 символов в поле VARCHAR2 (50) по той или иной причине (то есть потому, что им нужна другая строка на транспортной этикетке). Вы также должны иметь дело с тестированием граничных случаев (будет ли каждое приложение, отображающее ZIP, обрабатывать 50 символов?). И с тем фактом, что, когда клиенты извлекают данные из базы данных, они обычно выделяют память в зависимости от максимального размера данных, которые будут извлечены, а не фактической длины данной строки. Возможно, в этом конкретном случае не так много, но 40 байт на строку могут быть приличным фрагментом ОЗУ для некоторых ситуаций.
Кроме того, вы также можете рассмотреть возможность хранения (по крайней мере, для адресов в США) почтового индекса и расширения +4 отдельно. Как правило, полезно иметь возможность создавать отчеты по географическому региону, и вам часто может потребоваться объединить все в почтовый индекс, а не разбивать его с помощью расширения +4. На этом этапе полезно не пытаться вывести SUBSTR первые 5 символов почтового индекса.