Какой самый длинный телефонный номер в мире, который я должен учитывать в SQL varchar (длина) для телефона - PullRequest
176 голосов
/ 07 апреля 2009

Какой самый длинный телефонный номер в мире, который я должен учитывать в SQL varchar(length) для телефона.

соображения:

  • + для кода страны
  • () для кода города
  • x + 6 номеров для расширения Extension (так что сделайте это 8 {пробел})
  • пробелы между группами (т.е. в американских телефонах + x xxx xxx xxxx = 3 пробела)
  • вот где мне нужна ваша помощь, я хочу, чтобы она была по всему миру

Учтите, что в моем конкретном случае сейчас мне не нужны карточки и т. Д., Номер начинается с кода страны и заканчивается добавочным номером, комментариями факса / телефона и т. Д., А также не требует ввода телефонных карточек.

Ответы [ 4 ]

143 голосов
/ 19 января 2011

Предполагая, что вы не храните такие вещи, как «+», «()», «-», пробелы и «что у вас есть» (и с какой стати, это проблемы с представлением, которые могут варьироваться в зависимости от местных обычаев и распределение сети в любом случае), рекомендация МСЭ-Т E.164 для международной телефонной сети (к которой подключено большинство национальных сетей) указывает, что весь номер (включая код страны, но не включая префиксы, такие как префикс для международных вызовов , необходимый для набора номера, который варьируется от страны к стране и не включает суффиксы, такие как добавочные номера УАТС, не более 15 символов .

Префиксы вызовов зависят от абонента, а не вызываемого абонента, и, следовательно, не должны (во многих случаях) храниться вместе с номером телефона. Если база данных хранит данные для личной адресной книги (в этом случае имеет смысл хранить префикс международного вызова), самые длинные международные префиксы, с которыми вам придется иметь дело ( согласно Википедии ), в настоящее время состоят из 5 цифр, в Финляндии.

Что касается суффиксов, некоторые УАТС поддерживают до 11 цифр (опять же, согласно Википедии ). Поскольку добавочные номера УАТС являются частью другой схемы набора номеров (УАТС отделены от телефонных станций), внутренние номера необходимо отличать от телефонных номеров либо с разделителем, либо сохраняя их в другом столбце.

73 голосов
/ 07 апреля 2009

Если учесть, что между varchar (30) и varchar (100) нет разницы в накладных расходах, если вы храните только 20 символов в каждом, ошибитесь в сторону и просто сделайте 50.

16 голосов
/ 07 апреля 2009

В спецификации GSM 3GPP TS 11.11 в MSISDN EF (6F40) выделено 10 байтов для «номера набора». Поскольку это GSM-представление телефонного номера, и его использование поменяно местами (и всегда есть возможность заключить в скобки) 22 символов данных должно быть достаточно.

По моему опыту, есть только один случай открытия / закрытия скобок, это мой аргумент в пользу вышесказанного.

10 голосов
/ 07 апреля 2009

Это немного хуже, я использую телефонную карточку для международных звонков, поэтому ее местный номер в США + номер счета (6 цифр) + пин-код (4 цифры) + "пауза" + то, что вы описали выше.

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

...