MySQL float поля? Не, не слышал!

Открою данную рубрику одной из грубейших ошибок в проектировании структуры MySQL таблиц, а именно — использовании вместо типа FLOAT тип VARCHAR.

Чаще всего такую ошибку совершают новички в веб разработке. Сегодня нам встретилась таблица, имеющая следующую структуру:

uid INT(10), balance VARCHAR(255), total_balance VARCHAR(255), last_inside INT(255)

Опустим даже то, что в ней не были установлены индексы и уникальное поле, хотя из кода разработчик активно использовал UPDATE, INSERT и SELECT операторы, даже не подозревая, что при объеме данных в этой таблице отличным от 10 уже были бы заметны тормоза.

Но, мы отклонились… FLOAT, так много в этом слове:) стандартное представление типа FLOAT — FLOAT(10,2), конечно он может отличаться от того, который представлен в зависимости от задачи, но не суть, а суть в том, что если вы работаете с дробными числами и храните их в БД, то используйте для этого FLOAT!

Преимущества FLOAT:

  1. Работают все стандартные числовые методы (SUM, AVG, MIN, MAX etc.)
  2. Удобная работа со сравнением.
  3. Безопасность, сюда нельзя вставить строк и затем выдать их вам в продакшн в неподходящий момент.
  4. Удобство поиска
  5. Индекс на таком поле работает быстрее, чем полнотекстовый индекс на VARCHAR
  6. Ну и в конечном счете, это П-Р-А-В-И-Л-Ь-Н-О!

Еще 1 существенная ошибка, которая здесь допущена, это использование формата INT(255), INT — десятизначное целое число, + знак в начале, поэтому максимальная длина поля должна быть 11 знаков, если вы выделяете 255 работать конечно будет, но будет занимать памяти в 23 раза больше, а длиннее не будет, если нужно хранить числа большего количества знаков — используйте BIGINT.

На всякий случай оставлю здесь ссылку на доку MySQL по INT!

Всегда с вами,

команда AVGroup!

Пишите правильный код!

Автор

Антон Волик

Занимаюсь веб разработками последние 10 лет, за это время было много разных проектов, от маленьких до огромных. В настоящее время, по большей части, занимаюсь своими проектами - контекстными сайтами и сервисами, а так же, оказываю небольшие услуги всем желающим.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *