Хранение чисел как varchar

Можно ли хранить числа как varchar?

Какая разница между

int 123456789012 и varchar 123456789012?

Ответ 1

Нет, это почти всегда плохая идея.

  • будет использовать больше пространства
  • индексы также не будут выполняться
  • вы не можете выполнять арифметику
  • данные не являются самооправданными по типу
  • Генераторы автомодели выдадут вам строковый тип вместо числового
  • агрегаты, подобные SUM, больше не будут работать
  • вывод может сортироваться некорректно
  • вам понадобится CAST, чтобы использовать его как число, вызывая поражение производительности
  • и др.

Ответ 2

Вы можете хранить ведущие нули в varchar, которые вы не можете делать с целыми столбцами (например, возможно иметь разницу между 123 и 0000123). Например, почтовые индексы в некоторых странах. Однако, если вам нужно это сделать, тогда вы действительно имеете дело с текстовой информацией, которая должна иметь столбец varchar. Например, номера телефонов или почтовые индексы должны обязательно перейти к столбцу varchar.

В противном случае, если вы используете свои данные, например числа (добавляя их вместе, сравнивая их и т.д.), вы должны поместить его в целочисленный столбец. Они потребляют гораздо меньше места и быстрее используются.

Ответ 3

Я думаю, нормально хранить числа как varchar, если вы не хотите делать вычисления с ним.

Например, номер телефона или почтовые индексы лучше хранить в полях varchar, потому что вы можете их форматировать.

Ответ 4

Вы не сможете выполнять вычисления с столбцами, объявленными как varchar, поэтому следует использовать числовые типы. И так как ваш SQL-запрос является строкой в ​​любом случае, MySQL выполняет все преобразования для вас (это не значит, что вам не нужно проверять значения, предоставленные пользователем, конечно).