связанный с типом данных bigint в Mysql - PullRequest
2 голосов
/ 25 мая 2020

объявить x bigint; set x = 180181182149150151152;

Ошибка: значение вне допустимого диапазона для столбца «x» в строке 1.

Итак, мой вопрос: могу ли я хранить большое число, подобное приведенному выше, внутри bigint?

1 Ответ

1 голос
/ 25 мая 2020

Вот наибольшее значение, поддерживаемое BIGINT UNSIGNED, по сравнению с числом, которое вы используете:

180181182149150151152 = your number
 18446744073709551615 = 2^64-1, largest value for BIGINT UNSIGNED

Вы можете видеть, что ваше число примерно в 10 раз больше, чем наибольшее целочисленное значение, поддерживаемое MySQL. Для хранения вашего числа потребуется 68 бит, но MySQL поддерживает только целочисленные типы данных до 64-битных .

Вы можете хранить значения с большей величиной в FLOAT или DOUBLE, но вы потеряете точность. Другими словами, вы просто не можете поместить 68 бит информации в 64 бита кодирования.

mysql> create procedure p() begin declare x double; set x = 180181182149150151152; select x; end;;

mysql> call p;;
+-----------------------+
| x                     |
+-----------------------+
| 1.8018118214915015e20 |
+-----------------------+

Вы можете использовать DECIMAL(), если вы зададите ему достаточную точность: 1017 * Подробнее: https://dev.mysql.com/doc/refman/8.0/en/fixed-point-types.html

...