「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > MySQL が挿入された大きな整数を短い列に変換するのはなぜですか?

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

2024 年 11 月 13 日に公開
ブラウズ:230

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

ここで:

  • Number は挿入される元の数値です
  • Bits は、 destination column

この例では、Number は 715988985123857、Bits は 10 となり、結果は次のようになります:

2147483647

BigInt vs. Int

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

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3