Ralat 1292: Menyiasat Nilai DOUBLE Dipenggal dalam MySQL
Penerangan Masalah:
Apabila menghadapi ralat berikut:
#1292 - Truncated incorrect DOUBLE value:
ialah mudah untuk mengandaikan bahawa jenis data DOUBLE adalah puncanya. Walau bagaimanapun, ralat ini boleh timbul walaupun tiada medan atau data yang berkaitan dengan nilai DOUBLE.
Penjelasan Terperinci:
Ralat ini biasanya berlaku apabila MySQL cuba membandingkan nilai berangka dengan nilai bukan angka, yang membawa kepada pemangkasan semasa penukaran data. Dalam pertanyaan yang diberikan, kemungkinan punca ralat ialah perbandingan dalam klausa WHERE:
ON ac.company_code = ta.company_code
Jika jenis data ac.company_code dan ta.company_code berbeza (cth., satu ialah integer manakala yang lain ialah rentetan), MySQL mungkin cuba menukar salah satu nilai agar sepadan dengan yang lain, mengakibatkan pemotongan ralat.
Menyelesaikan Isu:
Untuk menyelesaikan isu, sahkan bahawa jenis data ac.company_code dan ta.company_code adalah serasi. Jika tidak, pertimbangkan untuk menggunakan CAST eksplisit untuk menukar salah satu nilai agar sepadan dengan yang lain atau lumpuhkan mod ketat dengan menetapkan sql_mode = 'ALLOW_INVALID_DATES' dalam konfigurasi MySQL.
Contoh:
ON CAST(ac.company_code AS UNSIGNED) = CAST(ta.company_code AS UNSIGNED)
Melumpuhkan mod ketat akan membolehkan MySQL menghantar nilai yang tidak serasi secara automatik, menganggap amaran sebagai mesej maklumat dan bukannya ralat.
Dengan memahami punca ralat pemangkasan, pembangun boleh mendiagnosis dan menyelesaikan isu ini dengan berkesan, memastikan pelaksanaan pertanyaan mereka lancar.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat MySQL 1292: Nilai DOUBLE Salah Dipenggal Walaupun Tanpa Medan DOUBLE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!