mysql এ বিশ্বব্যাপী sql_mode সেট করা


91

আমি মাইএসকিএলে sql_mode সেট করার চেষ্টা করছি তবে এটি একটি ত্রুটি ছুঁড়েছে।

আদেশ:

set global sql_mode='NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLE','NO_AUTO_CREATE_USER','NO_ENGINE_SUBSTITUTION'

এটি কি একাধিক মোড সেট করার সঠিক উপায় নয়? সেশন এবং গ্লোবাল মোড সেট করার সুবিধা কী কী? কোনটি preffered হয়? আমার কাছে বিভিন্ন ব্যবহারকারী বিভিন্ন ইউএনসি মান সহ ডাটাবেস আপডেট করার চেষ্টা করছেন এবং সেশন মোডটিকে 'NO_BACKSLASH_ESCAPES' এ সেট করার জন্য প্ররোচিত করেছেন, যদিও আমি এটির জন্য একটি গ্লোবাল মোডটি বোধ করতে পারি। এটা কোনো কিছু হলো?

আমাকে বুঝতে দাও.

ধন্যবাদ


এই ভ্রান্ত উক্তিগুলি সত্যই আমাকে বিরক্ত করে; পি। অন্যরা যেমন বলেছে যে আমি নিশ্চিত, ঠিক এটির কারণেই এটি অবশ্যই সঠিক নয়।
dyasta

উত্তর:


205

বিটিডাব্লু, আপনি যদি মাইএসকিউএলে গ্লোবাল সেট করেন:

SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';
SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';

এটি স্থায়ীভাবে সেট করবে না এবং এটি পুনরায় আরম্ভের পরে ফিরে আসবে।

সুতরাং আপনার এটি আপনার কনফিগার ফাইলে সেট করা উচিত (উদাঃ /etc/mysql/my.cnf[মাইকিকিএলডি] বিভাগে), যাতে পরিবর্তনগুলি মাইএসকিউএল পুনরায় চালু হওয়ার পরে কার্যকর হয়:

কনফিগার ফাইল: /etc/mysql/my.cnf

[mysqld] 
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

আপডেট: মাইএসকিএল (যেমন 5.7.8 বা তার বেশি) এর নতুন সংস্করণগুলিতে কিছুটা আলাদা সিনট্যাক্সের প্রয়োজন হতে পারে:

[mysqld]
sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"

এর মধ্যে কোনও ড্যাশ রয়েছে তা নিশ্চিত করুন sql-mode না একটি আন্ডারস্কোর, এবং যে মোড উদ্ধৃতি চিহ্ন রয়েছে।

এসকিএল-মোড বিকল্পগুলি দেখতে আপনার সংস্করণটির জন্য সর্বদা মাইএসকিউএল ডক্স রেফারেন্স করুন


4
আপনাকে ধন্যবাদ, আমার সিএনএফ এ সেট করা আমার জন্য কৌশলটি করেছে। আগ্রহীদের জন্য, এই পৃষ্ঠাটি আপনাকে জানায় যে স্কেল_মোডগুলি ডিফল্ট স্কেল_মোডগুলি 5.7 বা তার বেশি রয়েছে: dev.mysql.com/doc/refman/5.7/en/sql-mode.html
রিচার্ড

4
৫.7 সংস্করণ নোট আপ! সমস্যা ছিল।
আর্নেস্তাস স্ট্যাঙ্কেভিয়াস

একটি সত্যিকারের ওয়েব অ্যাপ্লিকেশনে দ্বিতীয় ক্যোয়ারি কাজ করে। আমি সবেমাত্র মাইসকিলি সংযোগের ক্যোয়ারির পরে আর একটি ক্যোয়ারী যুক্ত করেছি। SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION'; থ্যাঙ্কস চাদ!
জিটিডোরভ

4
ইন 5.7.20এবং এর ক্ষেত্রে mysql.ini, একটি আন্ডারস্কোর ব্যবহার করে এবং sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
উক্তিগুলি

30

আমি সমাধান করেছি।

সঠিক মোডটি হ'ল:

set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

17
সতর্কতা: আমাদের অভিজ্ঞতায় এটি কোনও মাইএসকিউএল পুনরায় চালু হওয়ার পরে সেটিংস ধরে রাখতে পারে না ...
চ্যাডউইক মেয়ার

4
হ্যাঁ এটি পুনরায় আরম্ভের পরে সেটিংস ধরে রাখে না
প্রকাশপৌডেল

4
ইউনিক্সের জন্য পুনরায় চালু করার পরে এটি ধরে রাখার জন্য, আমাকে একটি ~ / .my.cnf ফাইল তৈরি করতে হয়েছিল এবং [mysqld] sql_mode = "<নতুন মোড>" যুক্ত করতে হয়েছিল। আশা করি এটি সহায়তা করে
রমন সিং

27

স্কাইএল মোড স্থায়ীভাবে মাইএসকিএল কনফিগারেশন ফাইল ব্যবহার করে সেট করা হচ্ছে।

আমার ক্ষেত্রে আমাকে ফাইলটি পরিবর্তন করতে হবে /etc/mysql/mysql.conf.d/mysqld.cnfযেমন mysql.conf.dঅন্তর্ভুক্ত রয়েছে /etc/mysql/my.cnf। আমি এটি [মাইএসকিএলডি] এর অধীনে পরিবর্তন করেছি

[mysqld]
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

ONLY_FULL_GROUP_BYসিকিএলএল মোড সরিয়ে ফেলা হয়েছে কারণ এটি সমস্যার কারণ ছিল।

আমি ব্যবহার করছি ubuntu 16.04,php 7 এবং মাইএসকিএল - রূপান্তরটি আমাকে এটি দেয়mysql Ver 14.14 Distrib 5.7.13, for Linux (x86_64) using EditLine wrapper

এই পরিবর্তনের পরে কমান্ডের নীচে চলুন

sudo service mysql stop
sudo service mysql start

এখন এই ক্যোয়ারী অনুসারে স্কয়ারের মোডগুলি পরীক্ষা করুন SELECT @@sql_modeএবং আপনার সবেমাত্র সেট করা মোডগুলি পাওয়া উচিত।


14

ফাইল কনফিগার করুন: /etc/mysql/my.cnf OR /bin/mysql/my.ini

[mysqld]
port = 3306
sql-mode=""

MySQL আবার শুরু.

অথবা আপনি করতে পারেন

[mysqld]
port = 3306
SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";

MySQL আবার শুরু.


4
আমি মনে করি এটি এর sql_modeপরিবর্তে sql-mode
রমন সহসি

13

যে কেউ এই ত্রুটিটি মাইএসকিউএল 8 এর জন্য গুগল করছে For

মাইএসকিউএল 8.0.11 স্কেল-মোড থেকে 'NO_AUTO_CREATE_USER' সরান।

মাইএসকিউএল ৫.7: ব্যবহারকারী তৈরি করতে গ্রান্ট ব্যবহার করা হচ্ছে। পরিবর্তে, ব্যবহারকারীর তৈরি করুন। এই অনুশীলনটি অনুসরণ করে NO_AUTO_CREATE_USER এসকিউএল মোডকে GRANT বিবৃতিগুলির জন্য নিরবচ্ছিন্ন করে তোলে, তাই এটিও হ্রাস করা হয়। মাইএসকিউএল ৮.০.১১: ব্যবহারকারী তৈরি করতে গ্রান্ট ব্যবহার করা হচ্ছে। পরিবর্তে, ব্যবহারকারীর তৈরি করুন। এই অনুশীলনটি অনুসরণ করে NO_AUTO_CREATE_USER এসকিউএল মোডকে GRANT বিবৃতিগুলির জন্য নিরবচ্ছিন্ন করে তোলে, তাই এটিও সরানো হয়েছে।

এখান থেকে নেওয়া হয়েছে

সুতরাং, আপনার sql_modeএই মত হতে পারে:

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

অথবা আপনি যদি ডকার ব্যবহার করছেন তবে আপনি পরবর্তী কমান্ডটি ডকার-কমপোজ.আইএমএল যুক্ত করতে পারেন

  mysql:
    image: mysql:8.0.13
    command: --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    ports:
      - 13306:${MYSQL_PORT}

3

অস্থায়ী পরিবর্তনের জন্য নিম্নলিখিত কমান্ডটি ব্যবহার করুন

set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 

স্থায়ী পরিবর্তনের জন্য: ফাইল /etc/my.cnf বা /etc/mysql/mysql.conf.d/mysqld.cnf কনফিগার করতে যান এবং নিম্নলিখিত লাইনগুলি যুক্ত করুন এবং তারপর mysql পরিষেবা পুনরায় চালু করুন

[mysqld]
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

2

প্রশাসক ব্যবহারকারী হিসাবে ডেটাবেস অ্যাক্সেস (সম্ভবত মূল)।

বর্তমান এসকিউএল_মড পরীক্ষা করুন

mysql> SELECT @@sql_mode;

একটি নতুন sql_mode সেট করতে, ডাটাবেস থেকে প্রস্থান করুন, একটি ফাইল তৈরি করুন

nano /etc/mysql/conf.d/<filename>.cnf 

আপনার sql_mode সামগ্রী সহ

[mysqld]
sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

মাইএসকিএল পুনরায় চালু করুন

mysql> sudo service mysql stop
mysql> sudo service mysql start

আমরা /etc/mysql/conf.d/ ফোল্ডারে একটি ফাইল তৈরি করি কারণ মূল কনফিগারেশন ফাইল /etc/mysql/my.cnf ফোল্ডারে / etc / mysql / conf থেকে সমস্ত সেটিংস ফাইল অন্তর্ভুক্ত করতে কমান্ডটি লেখা হয় । ডি /


1

আমার ক্ষেত্রে আমাকে ফাইল /etc/mysql/mysql.conf.d/mysqld.cnfপরিবর্তন করতে হবে এটির অধীনে [mysqld ] এর

এই লাইনটি [ mysqld] অংশে আটকান

sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

1

আমার ঠিক একইরকম সমস্যা হয়েছিল যেখানে মাইএসকিউএল (5.6.45) sql_modeকোনও কনফিগার ফাইল থেকে গ্রহণ করবে না ।

সমাধানটি ছিল init_file = /etc/mysql/mysql-init.sqlকনফিগার ফাইলটিতে যুক্ত করা এবং তারপরে SET GLOBAL sql_mode = '';সেখানে চালানো ।


1

Sql_mode এর ডকুমেন্টেশন চেক করুন

পদ্ধতি 1:

স্কয়ার_মোডের ডিফল্ট মানটি পরীক্ষা করুন:

SELECT @@sql_mode //check current value for sql_mode

SET GLOBAL sql_mode = "NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

পদ্ধতি 2:

আপনার সম্পাদনার জন্য phpmyadmin অ্যাক্সেস করুন sql_mode

  • Phpmyadmin এ লগইন করুন এবং লোকালহোস্ট খুলুন
  • এ শীর্ষস্থানীয় ভেরিয়েবল মেনু আইটেম উপরে উপস্থিত এবং জন্য অনুসন্ধান SQL মোড
  • আপনার প্রয়োজনীয়তার উপর ভিত্তি করে sql_mode পরিবর্তন করতে সম্পাদনা বোতামে ক্লিক করুন
  • পরিবর্তনগুলি সংরক্ষণ করুন

পিএইচপিএমইডমিনে স্কয়ার মোড সেটিংস

উপরের জিনিসগুলি কার্যকর করার পরে সার্ভার পুনরায় চালু করুন


1

আমার ক্ষেত্রে mysql এবং উবুন্টু 18.04

আমি এই কমান্ডটি ব্যবহার করে স্থায়ীভাবে সেট করেছি

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

কনফিগারেশনের পরে লাইন যুক্ত করুন। নীচের চিত্রটিতে হাইলাইট করা উদাহরণ দেখুন।

sql_mode = ""

দ্রষ্টব্য: আপনি এখানে বিভিন্ন মোড যুক্ত করতে পারেন এটি আপনার প্রয়োজনের উপর নির্ভর করে NO_BACKSLASH_ESCAPES, STRICT_TRANS_TABLE, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

উপলভ্য এসকিউএল মোডের রেফারেন্স এবং ডকুমেন্টেশন দেখুন

এসকিএল মোড যুক্ত করা হচ্ছে

তারপরে সেভ করুন। সংরক্ষণের পরে আপনাকে আপনার মাইএসকিএল পরিষেবাটি পুনরায় চালু করতে হবে, নীচের কমান্ডটি অনুসরণ করুন:

sudo service mysql restart

আশাকরি এটা সাহায্য করবে :-)


0

যদি কেউ এটি কেবল বর্তমান সেশনের জন্য সেট করতে চান তবে নিম্নলিখিত কমান্ডটি ব্যবহার করুন

set session sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.