web-dev-qa-db-ja.com

mysqlで20桁を超える整数が必要な場合はどうすればよいですか?

BIGINTはMySQLで利用可能な最大の整数のようですよね?

たとえば、BIGINT(80)を保存する必要がある場合はどうすればよいですか?

Twitter APIドキュメントのどこかにあるように、これらの大きな整数をvarcharとして格納することを推奨する場合があるのはなぜですか?

あるタイプを別のタイプよりも使用することを選択した本当の理由はどれですか?

12
Keyne Viana

大きな整数は実際には20桁に制限されておらず、64ビットで表現できる数に制限されています(たとえば、数_99,999,999,999,999,999,999_は20桁の長さですが、有効な大きな整数ではありません)。

この制限がある理由は、ネイティブ形式の整数は基盤となるハードウェアによって比較的高速に操作できるのに対し、数値のテキストバージョン(傾向がある)は一度に1桁処理する必要があるためです。

最大の64ビット符号なし整数_18,446,744,073,709,551,615_より大きい数値が必要な場合は、それをvarchar(または他のテキストフィールド)として格納する必要があり、実行する必要がないことを期待します。その上で多くの数学的操作。

または、範囲は広いが精度が低い浮動小数点数、または列タイプとしてdecimal(65,0)を使用して、整数値に65桁を与えることができる10進数を調べることができます。

25
paxdiablo

numeric(65,0)を指定できますが、大きくする必要がある場合は、varcharが必要になります。

どちらかを選択する理由は、使用法、効率、およびスペースです。 intの使用は、bigintや、数学を行う必要がある場合は数値よりも効率的です。

4
Doug Kress

最大のストレージ効率が必要な場合は、その大きな整数を 任意のバイナリ文字列 として格納できます。

しかし、アプリケーションでも64ビット整数を処理する必要があるため、それが価値があるかどうかはわかりません。これも やりたいことではありません 強い理由はありません。

物事をシンプルに保ち、varcharを使用することをお勧めします。

2
sanmai