較短列的長整數轉換:機制與公式
將長整數插入較短整數列時,MySQL 通常會截斷該值以適合指定的長度。但是,在某些情況下,行為可能會有所不同,從而導致意外的轉換。
考慮一個 10 位長整數列 some_number。如果將超過最大整數範圍 (2147483647) 的值插入到此列中,MySQL 會將該值設為 2147483647,即該資料類型允許的最大整數,而不是截斷。
背後的機制轉換
由於整數溢位而發生轉換。當長整數超出可用範圍時,MySQL自動將其解釋為負整數並儲存二進位補碼表示形式。此負值在轉換回無符號整數時,結果為 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