Когда использовать varchar для числовых данных в таблицах InnoDB MySQL

#mysql #sqldatatypes

#mysql #sqldatatypes

Вопрос:

Бывают ли случаи, когда имеет смысл использовать текстовое поле (varchar, text и т. Д.) Вместо числового поля (int, float и т. Д.), Даже Если все сохраняемые данные являются числовыми?

Например, было бы лучше, быстрее или эффективнее хранить данные «5-значного почтового индекса» в поле varchar с 5 символами, а не в явно числовом поле?

Если да, как я могу определить, когда лучше всего использовать текстовое поле для числовых данных?

Я использую InnoDB, если это уместно.

РЕДАКТИРОВАТЬ: я использую почтовый индекс в качестве примера выше, но «в целом», когда следует выбирать текстовый тип данных вместо числового типа данных, когда все данные, которые будут сохранены, являются числовыми данными.

Ответ №1:

Зависит от того, как вы используете данные. Для почтовых индексов я бы использовал a VARCHAR — просто потому, что он является частью адреса и не будет использовать его для вычислений. Также вы можете захотеть включить другие страны в будущем (в Великобритании у нас есть почтовые индексы, которые являются буквенно-цифровыми).

Комментарии:

1. Таким образом, поля, содержащие числовые данные, которые могут использоваться в вычислениях, должны оставаться числовыми, но те, которые будут отображаться только «отображаться», могут быть безопасно установлены в varchar . Есть ли какая-либо выгода в использовании varchar над числовым типом данных в этом случае? (Спасибо за совет и по британским адресам, это было очень важно.)

Ответ №2:

Ответ Ed в значительной степени охватывает все, как правило:

  • не храните числовые значения в varchar столбцах — если только нет вероятности, что придется сохранять другие символы (примерами являются почтовые индексы и номера телефонов)

Когда вам нужны вычисления / сравнения сохраненных значений, всегда используйте числовые типы данных (при сравнении строк 2 больше 10)

Комментарии:

1. «при сравнении строк 2 больше 10» в значительной степени подводит итог. 🙂 Спасибо.