Как говорится в этом вопросе, почему лучше всего хранить телефонные номера в виде строк, а не целых чисел в столбце номер_собрания?
Не уверен, что я понимаю причину этого. Пожалуйста, помогите очистить это!
Спасибо!
Как говорится в этом вопросе, почему лучше всего хранить телефонные номера в виде строк, а не целых чисел в столбце номер_собрания?
Не уверен, что я понимаю причину этого. Пожалуйста, помогите очистить это!
Спасибо!
Номера телефонов представляют собой строки символов цифр, они не являются целыми числами.
Рассмотрим, например:
Выражение номера телефона в другой базе сделает его бессмысленным
Добавление или умножение двух телефонных номеров вместе или любая математическая операция на номер телефона не имеет смысла. В результате нет другого номера телефона (кроме как по коничеству)
Номера телефонов предназначены для ввода "как есть" в подключенное устройство.
Номера телефонов могут иметь нулевые значения.
Манипуляции телефонными номерами, такими как добавление кода области, являются строковыми операциями.
Сохранение строковой версии номера телефона делает это ясным и однозначным.
История. В старых системах с импульсным кодированием код для каждой цифры в телефонном номере был отправлен как столько же импульсов, сколько и цифра (или 10 импульсов для "0" ). Возможно, поэтому мы по-прежнему используем цифры для обозначения частей телефонного номера. См. http://en.wikipedia.org/wiki/Pulse_dialing
То, что сказал Нейл Слейтер, верен. Я бы добавил, что есть много крайних случаев, когда вы не можете последовательно выражать номер телефона как числовое значение.
Например, рассмотрим эти числа:
011-123-555-1212
+11-123-555-1212
+1 (112) 355-5121 x2
Это все потенциально допустимые номера телефонов, но они означают совсем другие вещи. Тем не менее, в целочисленной форме все они 111235551212
.
Рассмотрим эти номера телефонов, например
099-1234-56789
или +91-8907-687665
.
В этом случае, если атрибут phone_number
имеет тип integer
, он не может принять эти значения. Он должен быть string
для хранения этих типов значений. Таким образом, string
всегда предпочтительнее чем integer
Если вы собираетесь хранить номер для отображения со входа, то вы должны использовать строку.
Однако, хотя верно, что никакие математические операции не могут выполняться над числом, имеющим смысл. Использование числа в хэшсетах и индексирование выполняется быстрее, чем использование строки. Поэтому при условии, что вы можете гарантировать или гомогенизировать свой набор чисел, поэтому они все согласованы, тогда вы можете увидеть более высокую производительность, действующую на число.
Например, в мире Telco заявки на рейтинги для данного клиента включают в себя много поиска в их CLI, и в этой ситуации быстрее и дешевле искать по целому. Вообще, хотя строки будут отличной производительностью, это зависит только от производительности, и у вас есть многократный поиск для огромного диапазона чисел, т.е. Рейтинг 250 миллионов звонков через 2 миллиона строк и 2000 тарифов. В рейтинге памяти также становится дорого, поэтому возможность использования 64-битного int или uint дешевле при работе с этими томами.
Для этого есть несколько причин:
+
, (
, -
и т.д. (например: +33 (0) 6 12 23 34)Могут быть и другие причины, но я думаю, что уже достаточно много таких:)