Ол
Олеся

Приведение типов (MariaDB-10.3)

Если хранить в базе данных 10-значные номера телефонов в BIGINT, как в хранимой процедуре преобразовывать их в формат varchar чтобы спереди цеплять к ним префикс "+7"?
Функцией CONVERT()?
Цель: хочу, чтобы номера телефонов были индексом, по которому бы проводилась выборка всех прочих данных. Не просто Integer, а для других таблиц ещё и Foreign Key

Ан
Анастасия

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

итого: внешний ключ нужен для каскадных правок. для быстрого поиска нужен индекс.

НС
Надя Стекольщикова

Зачем хранить номера в BIGINT? Телефонный номер - это же не число, а строка. Что мешает хранить его в VARCHAR?

MySQL / MariaDB автоматически конвертирует строки в числа и числа в строки. Так что никаких ручных преобразований не требуется.

Зачем делать номер телефона внешним ключом? Номер телефона - всего лишь одно из полей контактных данных. И если тебе нужны выборки по номерам телефонов - просто добавь в таблицу индекс по этому полю. Но делать внешний ключ по номеру телефона - это, как минимум, странно.

Похожие вопросы
Приведение. К чему снится приведение? Не покойник, а приведение.
С++ static_cast. не выполняется приведение типов, в чём ошибка?
как выписать накладную в 1С редакция 10.3
1c управление торговлей 10.3
про приведение. что будет если разозлить приведение?
Как прошить элкар эбу 10.3
Славута 1.2 микас 10.3
где скачать кряк на AWicons.Pro.10.3.
Какая разница между этими типами данных
Приведение к третьей нормальной форме БД