MySQL-как хранить телефонные номера? [дубликат]




Возможные Дубликаты:
тип данных mysql для телефонного номера и адреса






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




  • 555 555 1212

  • 555-555-1212

  • (555) 1212 555

  • 5555551212

  • 1-555-555-1212

  • 1 (555) 555-1212

  • и так далее ...


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

958   11  

11 ответов:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

предположим, что вы храните номер как расширенный буквенно-цифровой составленный из символов, которые вы хотите принять и сохранить его в varchar(32) или что-то в этом роде. Удалите все пробелы, тире и т. д. Поместите форматирование номера телефона в отдельное поле (возможно, почерпнутое из настроек локали) если вы хотите поддерживать расширения, вы должны добавить их в отдельное поле;

с моей точки зрения, ниже мои предложения:

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

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

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

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

Comments

    Ничего не найдено.