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 サイトの他の関連記事を参照してください。