Мне нужно хранить почтовые индексы в базе данных. Насколько большим должен быть столбец?

Я ожидаю, что столбец будет VARCHAR2 в моей базе данных Oracle.

Почтовые индексы США - 9.

Канадцу 7 лет.

Я думаю, что 32 символа будут разумным верхним пределом

Что мне не хватает?

[EDIT] TIL: 12 - разумный ответ на вопрос Спасибо всем, кто внес свой вклад.


person EvilTeach    schedule 28.11.2008    source источник
comment
Ссылка полезная, но точность может быть немного ниже. Например, в нем перечислены австралийские почтовые индексы, состоящие из 7 символов, хотя на самом деле их 4. Ссылка: en.wikipedia. org / wiki / Postcodes_in_Australia и список почтовых индексов, доступный по адресу www1.auspost.com.au/ почтовые индексы.   -  person rossp    schedule 28.11.2008
comment
re: мой предыдущий комментарий - это не значит, что этот список бесполезен в качестве руководства. Предполагая, что список ошибается на стороне более длинных почтовых индексов, самая длинная длина составляет 9 символов, поэтому 16 символов или около того должны дать вам достаточно места для передышки.   -  person rossp    schedule 28.11.2008
comment
Также список стран немного короткий. Я уверен, что на планете больше стран, чем перечислено ...   -  person Robert Koritnik    schedule 11.10.2012
comment
Согласно en.wikipedia.org/wiki/List_of_postal_codes, самый длинный составляет 12 символов, если вы хранят '-', иначе 11   -  person Neil McGuigan    schedule 07.11.2013
comment
@CMS: вы можете обновить ссылку на эту страницу в Википедии, похоже, более подробный.   -  person Vajk Hermecz    schedule 26.03.2015
comment
Ссылка в исходном ответе не работает. Вы можете использовать следующие ссылки: Международные почтовые индексы и Википедия   -  person Mustafa    schedule 23.07.2015
comment
@Mustafa, ваша ссылка barnes & noble не работает (и, как ни странно, вы бы связали ее с информацией о почтовом индексе ...)   -  person Jon L.    schedule 07.05.2019


Ответы (8)


Просматривая страницу почтовых индексов Википедии, 32 символа должно быть более чем достаточно. Я бы сказал, что даже 16 символов - это хорошо.

person strager    schedule 28.11.2008
comment
Хорошая ссылка. Насколько я могу судить, даже с учетом знаков препинания в US ZIP + 4, 10 символов будет достаточно для любой страны. - person Jonathan Leffler; 28.11.2008
comment
Основываясь на этой ссылке со страницы, указанной выше, я бы выбрал 18 для размещения таких стран, как Чили: en .wikipedia.org / wiki / List_of_postal_codes - person mopo922; 13.01.2016
comment
Чили состоит из 7 символов. Веб-страница, на которую вы ссылаетесь, просто показывает расхождения в пунктуации. - person EvilTeach; 20.01.2016

Как уже отмечал @ neil-mcguigan, в Википедии есть достойная страница по этой теме. Исходя из этого, 12 символов должны делать это: http://en.wikipedia.org/wiki/List_of_postal_codes

В статье в Википедии перечислено около 254 стран, что неплохо с точки зрения UPU (всемирный почтовый Union) насчитывает 192 страны-члена.

person Vajk Hermecz    schedule 26.03.2015
comment
Обратите внимание, что Montserrat состоит всего из 8 символов, 1110-1350 обозначают диапазон. discovermni.com/about-montserrat/montserrat-post-codes - person Vajk Hermecz; 07.03.2018
comment
Возможно, Википедия нуждается в редактировании, поскольку почтовый индекс Мальты выглядит так же, как AAA NNNN. Я был бы не против иметь даже 15 символов, потому что позже это может быть меньше проблем, если нам придется регулировать длину столбца, также с правильным использованием типов данных, в любом случае он не должен занимать все 15 символов (возможно, varchar или nvarchar или тому подобное?) . - person Manohar Reddy Poreddy; 08.03.2018

Зачем объявлять размер поля больше, чем фактические данные, которые вы ожидаете в нем хранить?

Если первоначальная версия вашего приложения будет поддерживать адреса в США и Канаде (что я делаю вывод из того факта, что вы указываете эти размеры в своем вопросе), я бы объявил поле как VARCHAR2 (9) (или VARCHAR2 ( 10) если вы собираетесь хранить дефис в полях ZIP + 4). Даже если посмотреть на сообщения других пользователей о почтовых индексах в разных странах, VARCHAR2 (9) или VARCHAR2 (10) будет достаточным для большинства, если не для всех других стран.

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

Кроме того, вы также можете рассмотреть возможность хранения (по крайней мере, для адресов в США) почтового индекса и расширения +4 отдельно. Как правило, полезно иметь возможность создавать отчеты по географическому региону, и вам часто может потребоваться объединить все в почтовый индекс, а не разбивать его по расширению +4. На этом этапе полезно не пытаться вывести SUBSTR первых 5 символов почтового индекса.

person Justin Cave    schedule 28.11.2008
comment
Что ж, предполагая, что мы кодируем что-то глупое, например Pro * C, наличие достаточно большого поля для роста означает, что код не нужно будет трогать, если использование увеличится. - person EvilTeach; 29.11.2008
comment
Да, разбиение почтового индекса США на 5 и 4 цифры может иметь смысл, в зависимости от того, для чего вы планируете его использовать. Например, если вы выполняете какое-то сопоставление адресов, вы можете сначала сопоставить zip5 и разрешить неоднозначные ситуации с помощью zip 9. Это также помогает использовать код страны. - person EvilTeach; 29.11.2008

Нормализация? Почтовые индексы могут использоваться более одного раза и могут быть связаны с названиями улиц или городов. Отдельный стол (ы).

person Stephan Eggermont    schedule 28.11.2008
comment
Интересный. Другая точка зрения просто отвергнута без всякой причины. +1 - person EvilTeach; 25.05.2011
comment
Почтовый индекс обычно ссылается на квартал на одной стороне улицы. Чтобы найти более широкий регион, вы должны выбрать первую половину почтового индекса. Хранение этой информации в отдельной таблице ничему не поможет, и ее будет сложнее поддерживать. - person RevNoah; 02.12.2013
comment
@EvilTeach: Готов поспорить, он был отвергнут, потому что он не по теме. Сообщает ли он вам, какого размера должен быть столбец для хранения всех возможных почтовых индексов мира? Нет. - person wmax; 12.10.2016

То, что вам не хватает, - это причина, по которой вам нужно специально обрабатывать почтовый индекс.

Если вам действительно не нужно РАБОТАТЬ с почтовым индексом, я бы посоветовал не беспокоиться об этом. Под работой я имею в виду специальную обработку, а не использование только для печати адресных этикеток и т. Д.

Просто создайте три или четыре адресных поля VARCHAR2 (50) [например] и позвольте пользователю вводить все, что он хочет.

Вам действительно нужно сгруппировать заказы или транзакции по почтовому индексу? Думаю, нет, потому что в разных странах в этой сфере очень разные схемы.

person paxdiablo    schedule 28.11.2008
comment
Я согласен. Использование поля VARCHAR2 в действительности для такого поля, как почтовый индекс, не имеет значения. Слишком большой размер лучше, чем раздражать одного покупателя, потому что он не может ввести свои данные. - person Toby Allen; 28.11.2008
comment
И varchars удобны, поскольку базы данных (по крайней мере, DB2) могут оптимизировать их хранение, чтобы не тратить пространство для хранения. - person paxdiablo; 28.11.2008
comment
можно отметить, что сортировка по странам и почтовым индексам в некоторых местах приведет к снижению почтовых тарифов. - person EvilTeach; 29.11.2008
comment
@EvilTeach, как так? Конечно, вам нужно отправлять данные из A в B, я не могу сразу увидеть, как порядок сортировки из базы данных влияет на это (может быть, это только я, конечно). - person paxdiablo; 29.11.2008
comment
Несогласие. Когда-нибудь по ходу дела вы решите, что вам нужно проверить адреса в своей базе данных (например, для исправления типографских ошибок и ошибок ввода данных), и именно тогда вы обнаружите преимущество правильного построения модели данных, а не просто вставлять все в нее. ведра. - person Gary Myers; 30.11.2008
comment
@Igor: Тогда это была бы недостающая причина для этого, но этой причины СЕЙЧАС не существует, так что вы тратите время и деньги, удовлетворяя это требование. - person paxdiablo; 30.11.2008
comment
@Pax Если вы отправляете массовую почту в Royal Mail, предварительно отсортированную по главному округу (первая буква / две буквы) почтового индекса, то вы можете получить ее с помощью MailSort, что дешевле, чем обычная почта второго класса. Это всего лишь один пример. - person Richard Gadsden; 15.07.2009
comment
Я согласен с Гэри. Я только что интегрировал платежный процессор, который возвращает ошибку, если вы передаете ему почтовый индекс пользователя длиной более 10 символов. Используя приведенные выше ссылки, насколько я понимаю, Американское Самоа будет единственным, длина которого превышает 10 символов, но некоторые дальнейшие поиски в Google говорят мне, что весь остров использует почтовый индекс США 96799, поэтому я думаю, что 10 будет хорошим максимумом, особенно в моем случае, когда мне не нужны ошибки от этого платежного процессора. Если бы я ввел это ограничение с самого начала, мне бы не пришлось сейчас убирать. - person Phil R; 04.02.2015
comment
На что я бы просто сказал: ЯГНИ. Если вы знаете, что вам что-то понадобится, позаботьтесь об этом. Но здесь все было не так. Обеспечение того, что никогда не нужно, - это безвозвратные затраты, бесполезная трата. - person paxdiablo; 05.02.2015

Канадские почтовые индексы состоят всего из 6 символов в виде букв и цифр (LNLNLN).

person tegbains    schedule 28.11.2008
comment
Почтовые индексы Канады имеют пробел посередине. ANA NAN Это 7 символов. - person EvilTeach; 28.11.2008
comment
Но пространство всегда находится посередине, поэтому хранить его не нужно. - person Graeme Perrow; 28.11.2008
comment
@EvilTeach - да, но вы можете ожидать, что данные будут нормализованы перед сохранением - person ysth; 28.11.2008
comment
Пространство можно использовать для идентификации его по другим типам почтовых индексов. Было бы быстрее сохранить его в форме представления, чтобы он также согласовывался со всеми другими почтовыми индексами в таблице. Нет необходимости использовать регулярное выражение для денормализации кода. - person strager; 28.11.2008
comment
Кажется, что пробел не является частью данных: Примечание: почтовые индексы Канады всегда форматируются в одной и той же последовательности: буквенный знак / цифра / буква / цифра / буква / цифра (например, K1A0B1). Это с веб-сайта Почты Канады. - person tegbains; 29.11.2008
comment
@strager: Я думаю, что было бы лучше основывать тип почтового индекса на стране, а не на том, что пользователь вводит как почтовый индекс. Вы можете использовать регулярное выражение на основе страны, чтобы проверить ввод почтового индекса пользователем. - person tegbains; 29.11.2008
comment
Я не думаю, что пропуск пробела имеет какое-либо отношение к «нормализации». Это просто проблема с дисплеем. Как тире в номерах счетов. Я бы не стал хранить его, и я бы не стал полагаться на него для идентификации канадских почтовых индексов, а не на поле CountryCode (int), которое можно проиндексировать. Разделение уровня данных и представления - правильный способ сделать это. - person Sam; 17.11.2011
comment
Почта Канады предпочитает использовать пробелы в почтовом индексе при адресе конвертов. Лучше всего хранить его вместе с пробелом и обрабатывать проверку при входе. - person RevNoah; 02.12.2013
comment
@RevNoah Я собирался опровергнуть вашу точку зрения, но потом понял, что действительно согласен с вашей точкой зрения. LOL Похоже, это был долгий день, чем я думала. - person Andrew Steitz; 03.05.2016

Великобритания опубликовала стандарты: Каталог стандартов данных правительства Великобритании

Max 35 characters per line 

Международный почтовый адрес:

Minimum of 2 lines and maximum of 5 lines for the postal delivery point 
details, plus 1 line for country and 1 line for postcode/zip code 

Длина почтового индекса Великобритании:

Minimum 6 and Maximum 8 characters 
person PodTech.io    schedule 29.12.2016

Если вы хотите интегрировать почтовые индексы в базу данных, лучше всего использовать базу данных geonames. Несмотря на то, что ее сложно использовать и понять, это самая большая географическая база данных, свободно доступная таким пользователям, как мы.

Все остальные такие базы данных более или менее вероятно имеют те же данные и структуру. Они просто удаляют некоторую лишнюю / избыточную информацию из базы данных. Если вы просто делаете это для систем с низкой нагрузкой, используйте их бесплатные службы, ограничения привлекательны и обеспечивают более простой интерфейс с использованием json и ajax. Вы можете просмотреть ограничения здесь

Для вашей информации varchar (20) достаточно для хранения почтовых индексов.

person Jay Kapasi    schedule 07.09.2011