MySQL の整数オーバーフロー: 長整数の変換を理解する
MySQL では、長さが不十分なカラムに過度に大きな整数を挿入すると、予想外の変身。切り捨てとは異なり、この現象には、列のデータ型で表現できる最大値への整数の変換が含まれます。
説明のために、整数を保持できる長さ 10 の some_number という名前の列を考えてみましょう。最大 2147483647 (32 ビット符号付き整数の最大値)。この列に 715988985123857 のような数値を挿入すると、データベース内の結果は 2147483647 として表示されます。
この変換が発生するのは、MySQL が整数オーバーフローに対して次の動作に準拠しているためです。
この場合、715988985123857 は 2147483647 よりも大幅に大きいため、最大値までラップアラウンドし、観測値は 2147483647 になります。
式:
式オーバーフロー後の結果の数値を決定するには、次のように表現できます。
Result = (Input Integer - Minimum Integer for DataType) % (Maximum Integer for DataType - Minimum Integer for DataType) + Minimum Integer for DataType
指定された例の場合、結果は次のように計算できます。
Result = (715988985123857 - -2147483648) % (2147483647 - -2147483648) + -2147483648 = 2147483647
整数オーバーフローの仕組みを理解することで、予期しない値がデータベースに保存されるのを避けることができます。この知識は、指定されたデータ型の制限を超える可能性のある整数を扱う場合に特に重要です。
以上がMySQL 整数列に許可されている最大値より大きい数値を挿入するとどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。