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

Barbara Streisand
Lepaskan: 2024-11-03 20:18:29
asal
187 orang telah melayarinya

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>
    Salin selepas log masuk

    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
    Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!