Вот моя предложенная структура, я буду признателен за отзыв:
Поле базы данных телефона должно быть varchar (42) в следующем формате:
CountryCode - номер x добавочный номер
Так, например, в США мы могли бы иметь:
1-2125551234x1234
Это будет представлять номер США (код страны 1) с кодом города / номером (212) 555 1234 и добавочным 1234.
Разделение кода страны тире делает код страны понятным для того, кто просматривает данные. Это строго не обязательно, поскольку коды стран являются « префиксными кодами » (вы можете читать их слева направо, и вы всегда сможете однозначно определить страну). Но, поскольку коды стран имеют различную длину (в настоящее время от 1 до 4 символов), вы не можете сразу определить код страны, если не используете какой-либо разделитель.
Я использую «x», чтобы отделить расширение, потому что иначе было бы невозможно (во многих случаях) выяснить, какой номер был, а какой - добавочным.
Таким образом, вы можете хранить весь номер, включая код страны и добавочный номер, в одном поле базы данных, которое затем сможете использовать для ускорения запросов, вместо того, чтобы присоединяться к пользовательской функции, как вы были мучительно до сих пор.
Почему я выбрал варчар (42)? Ну, во-первых, международные телефонные номера будут разной длины, отсюда и «var». Я храню тире и "x", так что это объясняет "char", и в любом случае вы не будете выполнять целочисленную арифметику на телефонных номерах (я полагаю), поэтому нет смысла пытаться использовать числовой тип , Что касается длины 42, я использовал максимально возможную длину всех добавленных полей, основываясь на ответе Адама Дэвиса, и добавил 2 для тире и «х».