Rumah >pangkalan data >tutorial mysql >Mengapa MySQL Melemparkan Ralat \'DETERMINISTIC, NO SQL, or READS SQL DATA\' dengan Pengelogan Binari Didayakan?

Mengapa MySQL Melemparkan Ralat \'DETERMINISTIC, NO SQL, or READS SQL DATA\' dengan Pengelogan Binari Didayakan?

Barbara Streisand
Barbara Streisandasal
2024-11-03 20:18:29273semak imbas

Why Does MySQL Throw

Ralat: "DETERMINISTIC, NO SQL, or READS SQL DATA" Hilang dalam Perisytiharan Fungsi dengan Pengelogan Binari Didayakan

Apabila mengimport pangkalan data dalam MySQL, menghadapi ralat "1418 (HY000): Fungsi ini tidak mempunyai DETERMINISTIC, NO SQL, atau READS SQL DATA dalam pengisytiharannya dan pengelogan binari didayakan" menunjukkan bahawa fungsi yang dipersoalkan tidak mempunyai pengisytiharan yang sesuai.

Penyelesaian:

Terdapat dua kaedah untuk menyelesaikan isu ini:

  1. Melaksanakan Perintah Konsol MySQL:

    <code class="mysql">SET GLOBAL log_bin_trust_function_creators = 1;</code>

    Arahan ini melonggarkan semakan untuk fungsi bukan penentu, membenarkan import diteruskan.

  2. Konfigurasikan mysql.ini:
    Tambah baris berikut ke fail konfigurasi mysql.ini:

    log_bin_trust_function_creators = 1

Penjelasan:

Pengelogan binari merekodkan semua pengubahsuaian yang dibuat pada pangkalan data. Secara lalai, MySQL memerlukan fungsi yang mengubah suai data untuk diisytiharkan sebagai DETERMINISTIC, NO SQL, atau READS SQL DATA dalam pengisytiharan mereka untuk memastikan ia boleh direplikasi dengan tepat.

Deterministic Declaration for Stored Functions:

Pengisytiharan ini memaklumkan MySQL tentang sifat fungsi, panduan pengoptimuman dan keputusan replikasi.

  • DETERMINISTIK: Fungsi yang sentiasa menghasilkan hasil yang sama untuk input yang sama, tanpa mengira faktor luaran.
  • TIDAK DETERMINISTIK: Fungsi yang boleh menghasilkan hasil yang berbeza untuk input yang sama, seperti yang mengandungi fungsi MySQL bukan penentu (mis., NOW() , UUID()).
  • MEMBACA DATA SQL: Fungsi yang membaca data daripada pangkalan data, tanpa mengubah suainya.
  • TIADA SQL: Fungsi yang tidak mengandungi pernyataan SQL.

Nota: Jika pengelogan binari dilumpuhkan, tetapan log_bin_trust_function_creators tidak digunakan. Oleh itu, adalah penting untuk memastikan bahawa pengisytiharan deterministik yang sesuai ditentukan.

Dengan melaksanakan salah satu penyelesaian yang disediakan, anda boleh menyelesaikan ralat dan meneruskan import pangkalan data.

Atas ialah kandungan terperinci Mengapa MySQL Melemparkan Ralat \'DETERMINISTIC, NO SQL, or READS SQL DATA\' dengan Pengelogan Binari Didayakan?. 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