ホームページ  >  記事  >  データベース  >  MySQL が挿入された大きな整数を短い列に変換するのはなぜですか?

MySQL が挿入された大きな整数を短い列に変換するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-31 08:27:30764ブラウズ

Why does MySQL transform large integers inserted into shorter columns?

MySQL の数値列変換について

MySQL では、短い列に挿入されると長い整数が予期しない値に変換されることがよくあります。 MySQL は、切り詰めるのではなく、保存された値を調整します。この動作は、整数オーバーフロー メカニズムに起因すると考えられます。

たとえば、長さが 10 の some_number という名前の列について考えてみましょう。この長さを超える数値 (例: 715988985123857) が挿入されると、その数値は 2147483647 に変換されます。

オーバーフローのメカニズム

MySQL ドキュメントによると、整数オーバーフローは、計算の結果がデータ型の最大許容値を超えると発生します。この場合、10 ビット整数の最大値は 2147483647 です。

計算結果の式

変換は特定の式に従います:

Result = Number % (2^Bits) - 1

ここで:

  • 数値は挿入される元の数値です
  • ビットは宛先列のビット数です

この例では数値は 715988985123857、ビットは 10 で、結果は次のようになります。

2147483647

BigInt vs. Int

整数のオーバーフローを回避するには、より大きな整数には bigint データ型を使用します。 。 BigInt は最大 2^63-1 の値を格納できるため、切り捨てや変換の問題を防ぐことができます。

以上がMySQL が挿入された大きな整数を短い列に変換するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。