Задать вопрос
@suhuxa1

Почему нельзя использовать varchar для цифр?

Приветствую!
Очень много чисел предстоит заносить в таблицу вида: 0.0000000002324, 23.465099892348 и подобные. По числам не планируется сортировка или вроде того. Просто хранить их в базе и выводить в таком вот виде в нужных местах. Встал вопрос, можно ли не double использовать при проектировании бд, а, например, varchar 60 ? 60 символов же вполне хватит. Какие минусы у этого дела? Я четко понимаю, что в этом случае число будет храниться как строка, но операций с числами не потребуется. А если и потребуется, то можно будет решить через parseInt, например.
  • Вопрос задан
  • 1413 просмотров
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 6
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
sanasol.ws/2015/09/16/little-big-mysql-query-story

История(точнее даже скриншот) про то как один раз случайно сделал varchar вместо integer

Но это конечно перепутал в том месте должен был быть primary key, точнее ссылка на него.
Поэтому такая печаль.

Если where по этому столбцу не планируется, то такого конечно не будет.

Но в целом история про то что надо использовать правильные типы для данных.

Хотя опять же сейчас сам храню в базе цифры как varchar потому что они оооочень длинные. Больше max interger
Ответ написан
Roshette
@Roshette
So love fucking laravel
Минусы в загрузке ресурсов, и времени доступа, к информации
Ответ написан
Комментировать
@Sumor
Когда компьютеры были большими...
В общем для записи больших чисел цифрами, с возможностью работать с каждым разрядом был придуман тип packed decimal или binary-coded decimal. Его поддержка до сих пор есть в современных процессорах. Смысл в том, что в каждых 4-х битах числа хранится цифра 0-9, значения A-F не используются. Выигрыш в хранении, по сравнению с varchar - в 2 раза.
Можно развить эту тему и хранить цифры в массиве Int32, используя числа от 0-999999999 по 9 разрядов в каждом элементе. Для перевода в строку достаточно каждое число перевести в строку и соединить.
Ответ написан
Комментировать
tsklab
@tsklab
Здесь отвечаю на вопросы.
Можно.
Просто хранить их в базе и выводить в таком вот виде в нужных местах.
Локализация клиента может быть другой.
Выравнивание будет сложным.
Ответ написан
Комментировать
Arris
@Arris
Сапиенсы учатся, играя.
Как насчет DECIMAL? Уж всяко получше будет, чем varchar.
Ответ написан
@d-stream
Готовые решения - не подаю, но...
Какой смысл прикручивания к велосипеду с квадратными колесами треугольных подшипников с бубенчиками?

Начать необходимо с исходного - какие требования к значениям. Фраза "мне только хранить" может вообще спровоцировать на "не хранить". Или же далее будет хоть какое-то использование.

А в нормальном варианте - decimal, либо real, но с четким пониманием чем реал хорош и чем плох.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы