短い列での長整数の変換: メカニズムと式
長い整数を短い整数列に挿入する場合、通常、MySQL は値を切り捨てます。規定の長さ内に収まるようにします。ただし、場合によっては動作が異なり、予期しない変換が発生することがあります。
10 桁の長整数列 some_number を考えてみましょう。整数の最大範囲 (2147483647) を超える値がこのカラムに挿入された場合、MySQL は切り捨てではなく、値をそのデータ型で許可される最大整数である 2147483647 に設定します。
背後にあるメカニズム変換
変換は整数のオーバーフローにより発生します。長整数が使用可能な範囲を超えると、MySQL は自動的にそれを負の整数として解釈し、2 の補数表現を保存します。この負の値を符号なし整数に戻すと、2147483647 になります。
変換の式
結果の値は、次の式を使用して計算できます。
Resulting Integer = (Original Integer & 0x7FFFFFFF) 1
指定された例の場合、元の整数は 715988985123857:
Resulting Integer = (715988985123857 & 0x7FFFFFFF) 1 Resulting Integer = (2147483647) 1 Resulting Integer = 2147483647
したがって、715988985123857 から 2147483647 への変換は切り捨てではなく、指定されたデータ型で許可される最大整数へのオーバーフローです。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3