এটি ঠিক করার দুটি উপায় রয়েছে:
মাইএসকিউএল কনসোলে নিম্নলিখিতটি সম্পাদন করুন:
SET GLOBAL log_bin_trust_function_creators = 1;
Mysql.ini কনফিগারেশন ফাইলে নিম্নলিখিতটি যুক্ত করুন:
log_bin_trust_function_creators = 1;
সেটিংটি অ-নিষেধাজ্ঞামূলক ফাংশনগুলির জন্য চেকিং শিথিল করে। অ-নিরোধক ফাংশন হ'ল ফাংশন যা ডেটা সংশোধন করে (যেমন আপডেট আছে, সন্নিবেশ করানো বা বিবৃতি (গুলি) মুছুন)। আরও তথ্যের জন্য, এখানে দেখুন ।
দয়া করে নোট করুন, বাইনারি লগিং সক্ষম না করা থাকলে এই সেটিংটি প্রয়োগ হয় না।
সঞ্চিত প্রোগ্রামগুলির বাইনারি লগিং
যদি বাইনারি লগিং সক্ষম না হয় তবে লগ_বিন_স্রোত_ফাংশন_স্রষ্টাকর প্রয়োগ হয় না।
লগ_বিন_টাস্ট_ফাংশন_ক্রিটর
বাইনারি লগিং সক্ষম থাকলে এই পরিবর্তনশীল প্রযোজ্য।
সর্বাধিক পদ্ধতি হ'ল সঞ্চিত ফাংশনগুলির জন্য নির্ধারিত ঘোষণাগুলির আরও ভাল বোঝা এবং ব্যবহার। এই ঘোষণাগুলি মাইএসকিউএল দ্বারা প্রতিলিপিটি অনুকূলকরণ করতে ব্যবহৃত হয়েছে এবং স্বাস্থ্যকর প্রতিরূপ ধারণ করার জন্য এগুলি সাবধানতার সাথে বেছে নেওয়া ভাল জিনিস।
বিশিষ্টতা
একটি রুটিনকে " নিয়ামবাদী " হিসাবে বিবেচনা করা হয় যদি এটি সর্বদা একই ইনপুট পরামিতিগুলির জন্য একই ফলাফল তৈরি করে এবং অন্যথায় নির্ধারণ করে না। এটি বেশিরভাগ ক্ষেত্রে স্ট্রিং বা ম্যাথ প্রসেসিংয়ের সাথে ব্যবহৃত হয় তবে এটি সীমাবদ্ধ নয়।
"ডিটার্মিনিস্টিক" এর বিপরীতে ডিটার্মিনস্টিক নয় । " তন্ন তন্ন নির্ণায়ক কিংবা না নির্ণায়ক রুটিন সংজ্ঞা দেওয়া হয়, ডিফল্ট সেটি নিয়ামক নয়। ডিক্লেয়ার, আপনি নির্ণায়ক স্পষ্টভাবে উল্লেখ করতে হবে একটি ফাংশন নিয়ন্ত্রণবাদী হয়। "। সুতরাং দেখে মনে হচ্ছে যদি কোনও বিবৃতি না দেওয়া হয়, মাইএসকিউএলটি ফাংশনটিকে "নট ডিটার্মিনিস্টিক" হিসাবে বিবেচনা করবে। ম্যানুয়াল থেকে এই বিবৃতিটি ম্যানুয়ালটির অন্য একটি ক্ষেত্রের অন্যান্য বিবৃতিটির সাথে বিরোধী যা এটি বলে যে: "আপনি যখন কোনও সঞ্চিত ফাংশন তৈরি করেন, আপনাকে অবশ্যই তা ঘোষণা করতে হবে যে এটি নির্বিচারক বা এটি ডেটা পরিবর্তন করে না ify অন্যথায়, এটি তথ্য পুনরুদ্ধার বা প্রতিরূপের জন্য অনিরাপদ হতে পারে। ডিফল্টরূপে, একটি ক্রিয়েট ফাংশনটি স্বীকার করার জন্য, অন্তত একটি ডিজিটরমিস্টিক, কোনও এসকিউএল, বা রিড এসকিউএল ডেটা অবশ্যই স্পষ্টভাবে নির্দিষ্ট করতে হবে। অন্যথায় একটি ত্রুটি ঘটে "
মাইএসকিউএল 5.5 এ আমি ব্যক্তিগতভাবে ত্রুটি পেয়েছি যদি কোনও ঘোষণা না থাকে, তাই আমি সর্বদা কমপক্ষে একটি বিবরণ "ডিটার্মিনিস্টিক", "ডিজিটারমিনিস্টিক নয়", "ন এসকিউএল" বা "রিড এস এসকিউএল ডেটা" রাখি না কেন, আমার অন্যান্য ঘোষণাগুলি নির্বিশেষে।
এসকিউএল ডেটা
পড়া
পরিবর্তিত এসকিউএল ডেটা
এটি নির্দেশ করে যে রুটিনে স্টেটমেন্ট থাকে যা ডেটা লিখতে পারে (উদাহরণস্বরূপ, এটি আপডেট, INSERT, মোছা বা ALTER নির্দেশাবলী ধারণ করে)।
কোন এসকিউএল
এটি নির্দেশ করে যে রুটিনে কোনও এসকিউএল বিবৃতি নেই।
এসকিউএল কনটেন করুন
এটি নির্দেশ করে যে রুটিনে এসকিউএল নির্দেশাবলী রয়েছে তবে এতে ডেটা পড়তে বা লেখার বিবৃতি থাকে না। এই বৈশিষ্ট্যগুলির কোনও একটিও স্পষ্টভাবে না দেওয়া থাকলে এটি ডিফল্ট। এ জাতীয় বিবৃতিগুলির উদাহরণগুলি হ'ল নির্বাচন করুন এখন (), নির্বাচন করুন 10 + @ বি, SET @ x = 1 বা ডিও রিলিজ_লোক ('অ্যাবসি'), যা এক্সিকিউট করে কিন্তু ডেটা পড়তে বা লিখতে পারে না।
নোট করুন যে মাইএসকিউএল ফাংশনগুলি ডিটারমিনিস্টিক নিরাপদ নয়, যেমন: NOW (), ইউআইডি (), ইত্যাদি, যা বিভিন্ন মেশিনে বিভিন্ন ফলাফল আনার সম্ভাবনা রয়েছে, সুতরাং এই জাতীয় নির্দেশাবলীর সাথে একটি ব্যবহারকারীর ফাংশন অবশ্যই বিশদ নয় বলে ঘোষণা করা উচিত । এছাড়াও, এমন একটি ফাংশন যা একটি অনিবন্ধিত স্কিমা থেকে ডেটা পাঠ করে তা স্পষ্টভাবে NONDETERMINISTIC। *
রুটিনের প্রকৃতির মূল্যায়ন নির্মাতার "সততা" এর উপর ভিত্তি করে: মাইএসকিউএল পরীক্ষা করে না যে একটি রুটিন ঘোষিত একটি রুটিন বিবৃতিমুক্ত, যা নির্ধারিত ফলাফল প্রকাশ করে results তবে একটি রুটিনকে ভুলভাবে ঘোষণা করা ফলাফলগুলিকে প্রভাবিত করতে পারে বা কার্য সম্পাদনকে প্রভাবিত করতে পারে। DETERMINISTIC হিসাবে একটি অ-সংজ্ঞাবিরোধী রুটিন ঘোষণার ফলে অপ্টিমাইজারকে ভুল কার্যকর প্রয়োগ পরিকল্পনার পছন্দগুলি তৈরি করার কারণে অপ্রত্যাশিত ফলাফল হতে পারে। NONDETERMINISTIC হিসাবে একটি নিয়ন্ত্রক রুটিন ঘোষণার ফলে উপলব্ধ অপ্টিমাইজেশন ব্যবহার না করার কারণে কর্মক্ষমতা হ্রাস পেতে পারে।