MySQL の数値列変換について
MySQL では、短い列に挿入されると長い整数が予期しない値に変換されることがよくあります。 MySQL は、切り詰めるのではなく、保存された値を調整します。この動作は、整数オーバーフロー メカニズムに起因します。
たとえば、長さが 10 の some_number という名前の列について考えてみましょう。この長さを超える数値 (例: 715988985123857) が挿入されると、その数値は 2147483647 に変換されます。
オーバーフローのメカニズム
MySQL ドキュメントによると、整数オーバーフローは、計算結果がデータ型の最大許容値を超えると発生します。この場合、10 ビット整数の最大値は 2147483647 です。
計算結果の式
変換は特定の式に従います。
Result = Number % (2^Bits) - 1
ここで:
この例では、Number は 715988985123857、Bits は 10 となり、結果は次のようになります:
2147483647
BigInt vs. Int
整数のオーバーフローを回避するには、より大きな整数には bigint データ型を使用します。 BigInt は最大 2^63-1 の値を格納できるため、切り捨てや変換の問題を防ぐことができます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3