Что делать, если вам нужны целые числа больше 20 цифр на mysql? - PullRequest
12 голосов
/ 22 августа 2011

Похоже, BIGINT - это самое большое целое число, доступное в MySQL, верно?

Что делать, когда вам нужно сохранить BIGINT (80), например?

Почему в некоторых случаях, например, где-то в документации по API Twitter, мы рекомендуем хранить эти большие целые числа как varchar?

Какая реальная причина выбора одного типа вместо другого?

Ответы [ 4 ]

24 голосов
/ 22 августа 2011

Большие целые числа на самом деле не ограничены 20 цифрами, они ограничены числами, которые могут быть выражены в 64 битах (например, число 99,999,999,999,999,999,999 не является действительным большим целым числом, несмотря на то, что оно имеет длину 20 цифр) .

Причина, по которой у вас есть это ограничение, заключается в том, что целые числа в собственном формате могут относительно быстро обрабатываться базовым оборудованием, тогда как текстовые версии числа (как правило) должны обрабатываться по одной цифре за раз.

Если вы хотите, чтобы число было больше, чем наибольшее 64-разрядное целое число без знака 18,446,744,073,709,551,615, вам нужно будет сохранить его как varchar (или другое текстовое поле) и надеяться, что вам не нужно делать много математических операций. манипуляции на нем.

Кроме того, вы можете посмотреть на числа с плавающей запятой, которые имеют больший диапазон, но меньшую точность, или на десятичные числа, которые должны дать вам 65 цифр для целого значения, с decimal(65,0) в качестве типа столбца.

4 голосов
/ 22 августа 2011

Вы можете указать numeric(65,0), но если вам нужно увеличить размер, вам понадобится varchar.

Причиной выбора одного над другим является использование, эффективность и пространство. Использование int более эффективно, чем bigint или, я полагаю, числовое значение. Если вам нужно сделать с ним математические вычисления.

2 голосов
/ 22 августа 2011

Вы можете хранить эти большие целые числа как произвольную двоичную строку , если хотите максимальную эффективность хранения.

Но я не уверен, стоит ли это того, потому что вам придется иметь делос более чем 64-битными целыми числами в вашем приложении, что также не то, что вы хотите сделать без веской причины.

Лучше сохранить простоту и использовать varchar.

0 голосов
/ 22 августа 2011

BIGINT ограничен по определению 8 цифрами. Максимальное количество цифр в типе DECIMAL - 64. Вы должны использовать VARCHAR для хранения значений большей точности и помнить, что нет прямой математики таких значений.

...