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

Mary-Kate Olsen
Lepaskan: 2024-11-01 09:57:02
asal
775 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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
Salin selepas log masuk

Dalam kes ini:

result = 715988985123857 % 2147483647 = 2147483647
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!