Rumah  >  Artikel  >  pangkalan data  >  Mengapa Nilai Integer Besar Berubah menjadi 2147483647 Apabila Dimasukkan ke dalam Lajur INT MySQL?

Mengapa Nilai Integer Besar Berubah menjadi 2147483647 Apabila Dimasukkan ke dalam Lajur INT MySQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-01 09:57:02776semak imbas

Why Does a Large Integer Value Transform into 2147483647 When Inserted into a MySQL INT Column?

Memahami Percanggahan Pemotongan Integer

Pertimbangkan situasi di mana anda mempunyai lajur integer dengan panjang 10, seperti berikut:

<code class="sql">`some_number` int(10) unsigned NOT NULL</code>

Apabila memasukkan nilai yang lebih besar daripada julat lajur yang dibenarkan:

<code class="php">$some_number = 715988985123857;
$query = "INSERT INTO this_table SET some_number = ?";
$stmt = $mysqli->prepare($query);
$stmt->bind_param('i', $some_number);
$stmt->execute();</code>

Anda mungkin menjangkakan pemotongan akan berlaku, menghasilkan nilai yang lebih pendek. Walau bagaimanapun, secara mengejutkan, nilai dalam jadual berubah menjadi 2147483647.

Mekanisme Di Sebalik Transformasi

Menurut dokumentasi MySQL, limpahan integer untuk jenis int dan integer akan mengakibatkan nombor maksimum yang dibenarkan, yang dalam kes ini ialah 2147483647. Tingkah laku ini bukan pemotongan tetapi sebaliknya operasi modulo, yang mengambil baki nilai asal dibahagikan dengan nombor maksimum yang dibenarkan.

Formula untuk Pengiraan

Untuk mengira hasil limpahan integer, gunakan formula berikut:

result = original_value % maximum_allowed_value

Dalam kes ini:

result = 715988985123857 % 2147483647 = 2147483647

Oleh itu, nilai besar bagi 715988985123857 menjadi 2147483647 dalam pangkalan data disebabkan limpahan integer dan operasi modulo.

Atas ialah kandungan terperinci Mengapa Nilai Integer Besar Berubah menjadi 2147483647 Apabila Dimasukkan ke dalam Lajur INT MySQL?. 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