Rumah >pangkalan data >tutorial mysql >Bagaimana MySQL Mengendalikan Integer Panjang dalam Lajur Lebih Pendek: Limpahan atau Pemangkasan?

Bagaimana MySQL Mengendalikan Integer Panjang dalam Lajur Lebih Pendek: Limpahan atau Pemangkasan?

DDD
DDDasal
2024-10-27 20:08:02730semak imbas

How Does MySQL Handle Long Integers in Shorter Columns: Overflow or Truncation?

Transformasi Integer Panjang dalam Lajur Lebih Pendek: Mekanisme dan Formula

Apabila memasukkan integer panjang ke dalam lajur integer yang lebih pendek, MySQL biasanya memotong nilai untuk muat dalam panjang yang ditentukan. Walau bagaimanapun, dalam sesetengah kes, gelagat mungkin berbeza, mengakibatkan perubahan yang tidak dijangka.

Pertimbangkan lajur integer panjang 10 digit some_number. Jika nilai yang melebihi julat integer maksimum (2147483647) dimasukkan ke dalam lajur ini, bukannya pemotongan, MySQL akan menetapkan nilai kepada 2147483647, integer maksimum yang dibenarkan untuk jenis data tersebut.

Mekanisme Di Belakang Transformasi

Transformasi berlaku disebabkan limpahan integer. Apabila integer panjang melebihi julat yang tersedia, MySQL secara automatik mentafsirkannya sebagai integer negatif dan menyimpan perwakilan pelengkap kedua-duanya. Nilai negatif ini, apabila ditukar kembali kepada integer tidak bertanda, menghasilkan 2147483647.

Formula untuk Transformasi

Nilai yang terhasil boleh dikira menggunakan formula berikut:

Resulting Integer = (Original Integer & 0x7FFFFFFF) + 1

Untuk contoh yang diberikan, dengan integer asal 715988985123857:

Resulting Integer = (715988985123857 & 0x7FFFFFFF) + 1
Resulting Integer = (2147483647) + 1
Resulting Integer = 2147483647

Oleh itu, penjelmaan daripada 715988985123857 kepada 2147483647 adalah bukan satu limpahan maksimum untuk larian maksimum. jenis data yang ditentukan.

Atas ialah kandungan terperinci Bagaimana MySQL Mengendalikan Integer Panjang dalam Lajur Lebih Pendek: Limpahan atau Pemangkasan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn