Rumah >pangkalan data >tutorial mysql >Mengapa Pernyataan SELECT MySQL Saya Tidak Mengembalikan Baris Apabila Membandingkan Nilai Apungan kepada Pemalar?
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!