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!