Rumah >pangkalan data >tutorial mysql >Mengapa Pernyataan SELECT MySQL Saya Tidak Mengembalikan Baris Apabila Membandingkan Nilai Apungan kepada Pemalar?

Mengapa Pernyataan SELECT MySQL Saya Tidak Mengembalikan Baris Apabila Membandingkan Nilai Apungan kepada Pemalar?

DDD
DDDasal
2024-10-29 10:51:02545semak imbas

Why Does My MySQL SELECT Statement Return No Rows When Comparing a Float Value to a Constant?

Menyelesaikan Percanggahan Titik Terapung dalam Pilihan MySQL

Apabila melaksanakan pernyataan SELECT dengan klausa WHERE yang membandingkan nilai apungan kepada pemalar, pengguna mungkin menghadapi keputusan yang tidak dijangka. Sebagai contoh, pertanyaan berikut tidak mengembalikan baris:

<code class="sql">SELECT * FROM `table` WHERE `ident`='ident23' AND `price`='101.31';</code>

Walau bagaimanapun, mengalih keluar syarat perbandingan harga menghasilkan baris yang betul:

<code class="sql">SELECT * FROM `table`;</code>

Percanggahan ini boleh dikaitkan dengan cara MySQL mengendalikan ketepatan titik terapung. Walaupun nilai yang diambil daripada pangkalan data menunjukkan '101.31', ia mungkin berbeza sedikit daripada pemalar sebenar yang digunakan dalam klausa WHERE disebabkan oleh ketidaktepatan aritmetik titik terapung.

Penyelesaian: Menghantar kepada PERPULUHAN

Untuk menyelesaikan isu ini, seseorang boleh menghantar lajur harga kepada jenis PERPULUHAN dalam klausa WHERE:

<code class="sql">SELECT * FROM `table` WHERE CAST(price AS DECIMAL) = CAST(101.31 AS DECIMAL);</code>

Ini memastikan bahawa nilai pangkalan data dan pemalar diwakili sebagai PERPULUHAN, menghapuskan sebarang isu ketepatan yang berpotensi.

Penyelesaian Alternatif: Menukar Jenis Lajur

Sebagai alternatif, pertimbangkan untuk menukar jenis data lajur harga kepada PERPULUHAN terus. DECIMAL memberikan ketepatan dan skala yang lebih besar apabila bekerja dengan nilai monetari, menghapuskan keperluan untuk menghantar dalam pertanyaan SELECT.

Atas ialah kandungan terperinci Mengapa Pernyataan SELECT MySQL Saya Tidak Mengembalikan Baris Apabila Membandingkan Nilai Apungan kepada Pemalar?. 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