MySQL - как хранить номера телефонов?

Возможный дубликат:
mysql datatype для номера и адреса telephne

Любые предложения по наилучшей практике для хранения телефонных номеров в БД? Рассмотрим номер телефона в США:

  • 555 555 1212
  • 555-555-1212
  • (555) 555 1212
  • 5555551212
  • 1-555-555-1212
  • 1 (555) 555-1212
  • и т.д.

Должен ли я удалять форматирование и хранить только числа? Должен ли я просто использовать одно поле - или разделить их на: код страны, код города, номер телефона и т.д.? Предложения?

Ответ 1

  • Все как varchar (это не цифры, а "коллекции цифр" )
  • Страна + область + номер отдельно
  • Не во всех странах есть код города (например, Мальта, где я).
  • Некоторые страны отбрасывают ведущий ноль из кода зоны при наборе внутренних (например, в Великобритании)
  • Формат в клиентском коде

Ответ 2

Вы никогда не должны хранить значения в формате. Форматирование должно выполняться в представлении в зависимости от предпочтений пользователя.

Поиск телефонных укусов со смешанным форматированием почти невозможно.

В этом случае я разделил бы на поля и сохранил бы как целое. Числа быстрее, чем тексты, и разбивают их, а индекс на них делает все запросы быстрыми.

Ведущий 0 может быть проблемой, но, вероятно, нет. В Швеции коды всех зон начинаются с 0 и удаляются, если также набирается код страны. Но 0 на самом деле не является частью числа, это показатель, используемый для указания того, что я добавляю код области. То же самое для кода страны, вы добавляете 00, чтобы сказать, что вы используете код графства.

Ведущие 0 не должны храниться, они должны добавляться при необходимости. Скажем, вы сохраняете 00 в базе данных и используете сервер, который работает только с +, вам нужно заменить 00 на + для этого приложения.

Итак, сохраните числа как числа.

Ответ 3

Я предлагаю хранить числа в varchar без форматирования. Затем вы можете просто переформатировать номера на стороне клиента соответствующим образом. Некоторые культуры предпочитают иметь номера телефонов, написанные по-разному; во Франции они пишут номера телефонов, например, 01-22-33-44-55.

Вы также можете рассмотреть вопрос о сохранении другого поля для страны, для которого указан номер телефона, поскольку это может быть сложно определить по количеству, на которое вы смотрите. Великобритания использует 11-значные цифры, некоторые африканские страны используют 7-значные цифры.

Тем не менее, я работал в британской телефонной компании, и мы сохранили номера телефонов в нашей базе данных, если они были в Великобритании или на международном уровне. Таким образом, номер телефона в Великобритании будет 02081234123, а международный номер будет 001800300300.

Ответ 4

varchar, Не храните разделительные символы, которые вы, возможно, захотите отформатировать телефонные номера по-разному для разных целей. поэтому магазин (619) 123-4567 как 6191234567 Я работаю с данными телефонной книги и нашел, что это лучшая практика.

Ответ 5

Я бы предложил varchar для номера телефона (поскольку, как известно, номера телефонов имеют ведущие 0s, которые важны для сохранения) и номер телефона в двух полях:

Код страны и номер телефона, т.е. для 004477789787, вы можете сохранить CountryCode = 44 и номер телефона = 77789787

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

Я не думаю, что есть общий правильный и неправильный способ сделать это. Это действительно зависит от требований.

Ответ 6

Я бы рекомендовал хранить их как числа в столбцах типа varchar - по одному столбцу на "поле" (например, код contry и т.д.).

Формат должен применяться при взаимодействии с пользователем... что упрощает учет изменений формата, например, и поможет esp. когда ваше приложение выходит на международный уровень...

Ответ 7

Предложите сохранить номер в виде расширенного буквенно-цифрового символа, который вы хотите принять, и сохраните его в varchar (32) или что-то в этом роде. Извлеките все пробелы, тире и т.д. Поместите ФОРМАТИРОВАНИЕ номера телефона в отдельное поле (возможно, почерпнутое из настроек локали). Если вы хотите поддерживать расширения, вы должны добавить их в отдельное поле;

Ответ 8

Составьте мою точку зрения, ниже мои предложения:

  • Сохраняйте номер телефона в одном поле как varchar, и если вам нужно разделить его, то после получения раскола соответственно.
  • Если вы храните номер, то предшествующий 0 будет усекать, поэтому всегда сохраняйте как varchar
  • Подтвердите номер телефона пользователей перед вставкой в ​​таблицу.

Ответ 9

Я бы определенно разделил их. Было бы легко отсортировать номера по региональному коду и коду. Но даже если вы не собираетесь делиться, просто вставьте числа в БД в определенном формате. например 1-555-555-1212 Ваша клиентская сторона будет благодарна за то, что она не переформатировала ваши номера.

Ответ 10

Вы можете использовать varchar для хранения телефонных номеров, поэтому вам не нужно удалять форматирование

Ответ 11

Я бы сказал, хранить их как большое целое число, так как номер телефона - это просто номер. Это также дает вам больше гибкости в том, как вы представляете свои телефонные номера позже, в зависимости от ситуации, в которой вы находитесь.