Я не знаю, как лучше всего хранить его, но есть хотя бы лучший вариант, чем использовать varchar(39)
(или, varchar(40)
если вам нужно, подпись); вместо этого используйте decimal(39,0)
. Из документации MySQL :
Типы с фиксированной точкой (точное значение)
Типы DECIMAL и NUMERIC хранят точные числовые значения данных. Эти типы используются, когда важно сохранить точную точность, например, с денежными данными. В MySQL NUMERIC реализован как DECIMAL, поэтому следующие замечания о DECIMAL в равной степени применимы к NUMERIC.
MySQL 5.1 сохраняет значения DECIMAL в двоичном формате. До MySQL 5.0.3 они хранились как строки. См. Раздел 11.18, «Точная математика».
В объявлении столбца DECIMAL могут быть (и обычно) указываются точность и масштаб; например:
salary DECIMAL(5,2)
В этом примере 5 - это точность, а 2 - это масштаб. Точность представляет количество значащих цифр, которые сохраняются для значений, а шкала представляет количество цифр, которые можно сохранить после десятичной точки.
Стандартный SQL требует, чтобы DECIMAL (5,2) мог хранить любое значение с пятью цифрами и двумя десятичными знаками, поэтому значения, которые можно хранить в столбце зарплаты, варьируются от -999,99 до 999,99.
В стандартном SQL синтаксис DECIMAL (M) эквивалентен DECIMAL (M, 0). Аналогично, синтаксис DECIMAL эквивалентен DECIMAL (M, 0), где реализации разрешается определять значение M. MySQL поддерживает обе эти вариантные формы синтаксиса DECIMAL. Значение по умолчанию M составляет 10.
Если масштаб равен 0, значения DECIMAL не содержат десятичной точки или дробной части.
Максимальное количество цифр для DECIMAL составляет 65, но фактический диапазон для данного столбца DECIMAL может быть ограничен точностью или масштабом для данного столбца. Когда такому столбцу присваивается значение с большим количеством цифр после десятичной запятой, чем разрешено указанным масштабом, значение преобразуется в этот масштаб. (Точное поведение зависит от операционной системы, но обычно результатом является усечение до допустимого количества цифр.)