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


200

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

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

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

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


1
Я думаю, что преобразование числа в длинное значение было бы хорошим решением, и для этого потребуется только 64-битное пространство, я использую это годами, без проблем


1
@MattDiPasquale уже упоминалось здесь , но спасибо!
Шимми Вайцхандлер

2
Да, но этот ответ не включал ссылку, которую я дал. Пожалуйста. :-)
ma11hew28

Ответы:


79

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


26
Просто для сведения: так, когда есть какие-нибудь накладные расходы? пожалуйста, включите источник в ваш ответ, чтобы мы могли продолжить изучение его основ.
Shimmy Weitzhandler

6
Я знаю, что так и должно быть, но это не всегда. В MySQL (например) полная длина используется для сортировки. Лучше всего приложить хотя бы минимальные усилия.
Морган Токер

15
Там нет разницы в размере хранения между двумя размерами столбцов. Скорее всего, это накладные расходы, значительные или иные, в зависимости от вашей конкретной базы данных. Например, SQL Server теряет способность прогнозировать размеры страниц данных и, таким образом, оптимизировать доступ и выравнивание. Как всегда, тест.
Мэтт Энрайт

16
Преждевременная оптимизация - корень всего зла.
Хариндака

78
Обширные обобщения еще хуже. Проектирование системы с учетом оптимизации никогда не бывает зла в себе - оптимизация становится злом , когда один посвящает огромное количество времени на ненужную, незаметную и незначительную эффективность.
Jbowman

167

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

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

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


5
Если вы не храните символы формата (например, '+', '(', ')', '-' и '') и храните числа из разных стран, вы можете добавить столбец, чтобы указать формат тип числа, для которого отображается номер.
Trisped

38
Итог: 15символы. При сохранении префикса и суффикса нижняя строка: 5 + 15 + 11 = 31.
Алик Эльзин-килака

3
@ MattEnright, я думаю, вы должны обновить комментарий Алик Эльзина в своем ответе.
Шимми Вайцхандлер

4
'+' не является презентацией en.wikipedia.org/wiki/List_of_international_call_prefixes
qubodup

17

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

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


10

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

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


2
Вы получили очень хорошее замечание. Я добавил несколько строк в свое сообщение,
пожалуйста

10
Однако, повторный набор телефонной карты не должен быть в базе данных - это та часть, которая добавляется при наборе номера в соответствии с правилами набора номера. Сохраненные номера должны быть в форме ISO, без какой-либо информации, связанной с набором номера.
TomTom
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.