Ralat MySQL: "Fungsi ini tidak mempunyai DATA DETERMINISTIC, NO SQL, atau READS SQL dalam pengisytiharannya dan pengelogan binari didayakan"
Apabila cuba mengimport pangkalan data ke MySQL, ralat mungkin berlaku yang menunjukkan bahawa fungsi tidak mempunyai salah satu daripada pengisytiharan berikut dalam pengisytiharannya: DETERMINISTIC, NO SQL, atau READS SQL DATA. Ralat ini timbul apabila pengelogan binari diaktifkan.
Menyelesaikan Ralat:
Ralat ini boleh diatasi dengan dua cara:
Konfigurasikan Konsol MySQL: Jalankan arahan berikut dalam konsol MySQL:
SET GLOBAL log_bin_trust_function_creators = 1;
Edit Fail Konfigurasi: Tambahkan baris berikut ke fail konfigurasi mysql.ini:
log_bin_trust_function_creators = 1;
Pengubahsuaian ini membenarkan fungsi bukan deterministik digunakan dengan pengelogan binari. Walau bagaimanapun, jika pengelogan binari dilumpuhkan, tetapan ini tidak menjejaskan ralat.
Memahami Perisytiharan Fungsi:
Adalah penting untuk ambil perhatian bahawa fungsi yang mengandungi arahan bukan penentu, seperti NOW() atau UUID(), hendaklah diisytiharkan sebagai NOT DETERMINISTIC. Selain itu, fungsi yang membaca data daripada skema yang tidak direplikasi juga bukan penentu.
Amalan Terbaik:
Pendekatan yang ideal adalah untuk memahami dan menggunakan pengisytiharan deterministik untuk fungsi yang disimpan kerana ia membantu dalam pengoptimuman replikasi. MySQL mengesyorkan secara eksplisit menyatakan salah satu pengisytiharan yang disebut dalam takrifan fungsi yang disimpan untuk mengelakkan kemungkinan ralat.
Atas ialah kandungan terperinci Mengapa MySQL Melemparkan Ralat Mengenai Fungsi Deterministik Apabila Pengelogan Binari Didayakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!