ONLY_FULL_GROUP_BY অক্ষম করুন


614

আমি দুর্ঘটনাক্রমে কেবলমাত্র ওয়ানওয়াই_এফএলএল_গ্রো_বিওয়াই মোডটি সক্ষম করেছি:

SET sql_mode = 'ONLY_FULL_GROUP_BY';

আমি কীভাবে এটি অক্ষম করব?


38
আপনি চেষ্টা করেছেন SET sql_mode = ''?
ট্রিপ কাইনেটিকস

4
আপনি কেন এমন একটি মোড অক্ষম করতে চান যা মাইএসকিউএলকে এসকিউএল স্ট্যান্ডার্ডগুলির সাথে আরও ভালভাবে মেনে চলে, এবং একটি, এটি আপনাকে আপনার প্রশ্নগুলি লেখার ক্ষেত্রে আরও যত্নবান হতে শেখায়?
অ্যান্ড্রি এম

34
MySQL 5.7 হিসাবে, আপনি বিকল্প হিসাবে columnআপনার ক্যোয়ারী পুনঃনির্মাণ করতে ANY_VALUE ( ) ফাংশনটি ব্যবহার করতে পারেন । ডকটি এখানে
কোহেলথ-টেক

3
@ অ্যান্ড্রিএম আমাকে শীঘ্রই এটি ব্যবহার করতে হবে কারণ আমি পুরানো অ্যাপ্লিকেশনগুলির পুরো বোঝাটি একটি নতুন সার্ভারে পোর্ট করছি এবং আমার উত্স আছে কি না সেগুলি তাদের কাজ করা দরকার।
জয়দী 27'16

8
@ অ্যান্ড্রিএম কারণ আমি যদি একটি অনন্য সূচক কলাম দ্বারা গোষ্ঠীবদ্ধ করি তবে আমি অবশ্যই জানি যে প্রতিটি সারিটি অনন্য হবে - প্রত্যেকটির জন্য কমান্ড দ্বারা পৃথক গোষ্ঠী যুক্ত করা। একক। কলাম। টেবিলে একটি রাজকীয় ব্যথা হয়।
বেনুবার্ড

উত্তর:


1163

সমাধান 1: মাইএসকিএল কনসোল থেকে ONLY_FULL_GROUP_BY সরান

mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

আপনি এখানে আরও পড়তে পারেন

সমাধান 2: পিএইচপিএমইডমিন থেকে কেবলমাত্র_ফুল্ল_গ্রো_বাই সরান

  • Phpmyadmin খুলুন এবং লোকালহোস্ট নির্বাচন করুন
  • মেনু ভেরিয়েবলগুলিতে ক্লিক করুন এবং স্কয়ার মোডের জন্য ডাউন স্ক্রোল করুন
  • মানগুলি পরিবর্তন করতে এবং ONLY_FULL_GROUP_BY অপসারণ করতে সম্পাদনা বোতামে ক্লিক করুন এবং সেভ ক্লিক করুন। এখানে চিত্র বর্ণনা লিখুন

12
এই সমাধানটি মাইএসকিউএল 5.7.11 এ সূক্ষ্মভাবে কাজ করে এবং এটি গ্রহণযোগ্য হওয়া উচিত। গৃহীত উত্তরটি মাইএসকিউএলের নতুন সংস্করণে কাজ করে না
যেকোন_এফ

4
সুনিশ্চিত এটি কোনও বিষয় নয় REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''), মাইএসকিউএল যাইহোক রেকর্ড থেকে অযাচিত কমাগুলি সরিয়ে দেয়। ওপির উত্তর সঠিক।
নওফাল

40
এটি কাজ করে, তবে যখন আমি মাইএসকিএল সার্ভারটি পুনরায় চালু করি তখন ডিফল্টগুলি পুনরুদ্ধার করা হয় ... কেন? একটি অবিরাম সমাধান আছে? ধন্যবাদ!
ভিনসেন্ট প্যাসেলার

52
আমার প্রশ্নের উত্তর দেওয়ার জন্য (অবিরাম সমাধান): আপনাকে স্কয়ার_মোডের বর্ণনাটি একটি my.cnf ফাইলের মধ্যে রাখতে হবে (উদাহরণস্বরূপ /etc/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"
ভিনসেন্ট Pazeller

21
GLOBALআমার জন্য কাজ করে না, কিন্তু SESSIONকরেছে। SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
আন্দ্রে

371

হালনাগাদ:

এখানে চিত্র বর্ণনা লিখুন

আপনার বর্তমান মাইএসকিএল সেটিংস রাখতে এবং অক্ষম করতে ONLY_FULL_GROUP_BYআমি আপনার phpmyadmin বা আপনি যে কোনও ক্লায়েন্ট ব্যবহার করছেন এবং টাইপ করুন:

SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','') copy_me

আপনার my.iniফাইলটি পরবর্তী কপি ফলাফল ।

পুদিনা :sudo nano /etc/mysql/my.cnf

উবুন্টু 16 এবং তার বেশি :sudo nano /etc/mysql/my.cnf

উবুন্টু 14-16 :/etc/mysql/mysql.conf.d/mysqld.cnf

সতর্ক করা! copy_meফলাফলটিতে একটি দীর্ঘ পাঠ থাকতে পারে যা ডিফল্টরূপে ছাঁটাই করা যেতে পারে। নিশ্চিত করুন যে আপনি পুরো পাঠ্যটি অনুলিপি করেছেন!


পুরানো উত্তর:

যদি আপনি স্থায়ীভাবে ত্রুটিটি অক্ষম করতে চান " SELECT তালিকার এক্সপ্রেশন # N গ্রোপ BY ক্লোজে নেই এবং এতে অবিকৃত কলাম 'db.table.COL' রয়েছে যা GROUP BY ধারাতে কলামের সাথে কার্যকরীভাবে নির্ভর করে না; এটি স্ক্যাল_মোড = কেবল_ফুল_গ্রুপ_বিহীন inc "এই পদক্ষেপগুলি করুন:

  1. sudo nano /etc/mysql/my.cnf
  2. ফাইলের শেষে এটি যুক্ত করুন

    [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"
  3. sudo service mysql restart মাইএসকিউএল পুনরায় চালু করতে

এটি সমস্ত ব্যবহারকারীদের ONLY_FULL_GROUP_BYজন্য অক্ষম করবে


2
আমার জন্য, একই লাইনে মাইকিউএলএলডিডি ট্যাগ করা কার্যকর হয়নি, তবে একটি লাইন ব্রেক নিয়ে কাজ করেছে :) ধন্যবাদ
ব্লুব

23
উবুন্টুর জন্য, ফাইলটি যেখানে কাস্টম কনফিগারেশন মানগুলি চলে/etc/mysql/mysql.conf.d/mysqld.cnf
হ'ল

5
এটি উবুন্টু 16.04 এর জন্য কাজ করেছে (14 থেকে 16 আপগ্রেড হ'ল ..)। /Etc/mysql/my.cnf সঠিক ফাইল। Knb দ্বারা উল্লিখিত ফাইলটি এই মাই সিএনএফ ফাইলের মধ্যে অন্তত 16.04 এ অন্তর্ভুক্ত করা হয়েছে (কনফিগারেশনটি এখন একাধিক ফাইলে বিভক্ত হয়ে গেছে)।
জ্বিন

2
"নির্বাচন @ বর্গক্ষেত্র_মোড;" ব্যবহার করুন পরিবর্তনগুলি করার আগে বর্তমানে কী মোডগুলি চলছে তা দেখতে।
Zbigniew Ledwoń

1
আপনি যে আসল জায়গাটি দেখবেন [mysqld]তা এই ফাইলটিতে নাও থাকতে পারে, এটি একটি অন্তর্ভুক্ত ডিরেক্টরিতে থাকতে পারে। প্রথমে এই আদেশটি ব্যবহার করুন: grep -R "\[mysqld\]" *সেখানে কী আছে তা দেখার জন্য - এবং সেই বিষয়ে চেষ্টা করুনgrep -R "\bsql_mode\b" *
অলিভার উইলিয়ামস

203

ব্যবহারে সতর্কতা অবলম্বন করুন

SET sql_mode = '' 

এটি আসলে বর্তমানে সক্ষম সমস্ত মোডগুলি সাফ করে ars আপনি যদি অন্য সেটিংসের সাথে গোলযোগ করতে না চান তবে আপনি এটি করতে চাইবেন

SELECT @@sql_mode 

প্রথমে সক্ষম মোডের কমা-বিচ্ছিন্ন তালিকা পেতে, তারপরে ONLY_FULL_GROUP_BYবিকল্প ছাড়াই এটিকে এই তালিকায় সেট করুন ।


এই কাজ করতে সবচেয়ে ভালো উপায় কি আছে: then SET it to this list without the ONLY_FULL_GROUP_BY option.?
কেভিন মেরেডিথ

4
@ কেভিনমারেডেথ ডকস সম্পর্কে আমার পড়া এক সাথে একবারে একটি মোড চালু / বন্ধ করার উপায় নেই - সমস্ত উদাহরণগুলির জন্য আপনার পছন্দ অনুযায়ী কমা-বিচ্ছিন্ন তালিকা সরবরাহ করা প্রয়োজন - উদাহরণস্বরূপSET 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
যদি এটি স্থায়ী পরিবর্তন হয় sql_mode=<comma-separated-list>তবে এর মতো একটি লাইন দিয়ে my.cnf সম্পাদনা করুন: তারপরে আপনার সার্ভারটি থামিয়ে শুরু করুন। আপনার অপারেটিং সিস্টেমের জন্য দস্তাবেজগুলি, এবং সম্পাদনার সর্বোত্তম উপায়, মাই সিএনএফ অনুসরণ করুন।
ব্ল্যাকউড

107

একবার চেষ্টা করে দেখুন:

SET sql_mode = ''

সম্প্রদায় দ্রষ্টব্য: নীচের উত্তরগুলিতে নির্দেশিত হিসাবে, এটি আসলে বর্তমানে সক্ষম সমস্ত এসকিউএল মোডগুলি সাফ করে। এটি অগত্যা আপনি যা চান তা নাও হতে পারে।


11
বাহ, ''= 'full group by is disabled'? মাইএসকিউএল কিছু সুন্দর বোবা জিনিস করে তবে এটি সেখানে রয়েছে is
অ্যারন বার্ট্র্যান্ড

38
আমি মনে করি এটি মূলত কোনও বেকার মোড অক্ষম করে;
ZviBar

এটি আমার পক্ষে কাজ করে না। আমি দেখতে পেয়েছি 0 rows affectedএবং আমার ক্যোয়ারী এখনও কার্যকর হয় না:Error Code: 1055. Expression #6 of SELECT list is not in GROUP BY clause and contains nonaggregated column ...
ম্যাক্স হাইবার

10
এই উত্তরটি চেষ্টা করার আগে অবশ্যই ম্যাকাভিটির সতর্কতাটি দেখুন এবং যদি আপনি পরিবর্তনগুলি অবিরত রাখতে চান তবে কমান্ডটি ব্যবহার করেglobal নিশ্চিত হন ।
thomas88wp

6
প্রতিবার যখন আমি কিছু সময়ের পরে মাইএসকিএলে ফিরে আসি তখন আমি সবসময় এই সমস্যাটি পূরণ করি যা আমাকে বিরক্ত করে, কারণ আমি সমস্যাটি কী তা সবসময় ভুলে যাই :) যখন অনুভূতিটি হতাশ হয় তখন আপনি যখন মনে করেন যে এটি কাজ করে যাচ্ছিল এবং এখন তা হয় না কারণ সংস্করণ পরিবর্তন।
এক্স-হুমান

106
    mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
    mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
    mysql> exit;

@ র‌্যামিব্রেটন: আপনার মাইএসকিএল সংস্করণটি কী?
ওয়েইউয়ান

6
এটি আসলে কাজ করে। তবে আমি আমার সিস্টেম পুনরায় চালু করার পরে (উবুন্টু 16.04), sql_modeপূর্ববর্তী মানটিতে রোলব্যাক করব। আমি এখন কি করব?
pktangyue

দুর্দান্ত, আমার জন্য কাজ করেছে, কেবলমাত্র আমি এটিকে স্থায়ীভাবে রূপান্তর করতে পারি
ফার্নান্দো টরেস

73

বিদ্যমানগুলি অপসারণ না করেই কেবলমাত্র একটি মোডকে স্কয়ার_মোডে যুক্ত করা:

SET sql_mode=(SELECT CONCAT(@@sql_mode,',<mode_to_add>'));

অন্যকে অপসারণ না করে কেবল sql_mode থেকে একটি নির্দিষ্ট মোড অপসারণ:

SET sql_mode=(SELECT REPLACE(@@sql_mode,'<mode_to_remove>',''));

আপনার ক্ষেত্রে, আপনি যদি কেবল ONLY_FULL_GROUP_BYমোডটি সরাতে চান তবে নীচের কমান্ডটি ব্যবহার করুন:

SET sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));

তথ্যসূত্র: http://johnemb.blogspot.com/2014/09/adding-or-removing-ind individual-sql-modes.html


এটি একটি দুর্দান্ত উত্তর! ধন্যবাদ।
wedi

এটি বিশ্বব্যাপী না বর্তমান সংযোগে? দুর্দান্ত উত্তর!
অলিভার এম গ্রেচ

48

@Cwisperer ধন্যবাদ। সিমফোনি অ্যাপে ডক্ট্রাইন নিয়ে আমার একই সমস্যা ছিল। আমি আমার কনফিগারেশনটিতে কেবলমাত্র বিকল্পটি যুক্ত করেছি:

doctrine:
    dbal:
        driver:   pdo_mysql
        options:
            # PDO::MYSQL_ATTR_INIT_COMMAND
            1002: "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"

এটি আমার পক্ষে ভাল কাজ করেছে।


1
এবং যদি "সেট নামগুলি 'utf8', এসকিউএল_মোড = (নির্বাচন করুন পুনর্নির্মাণ (@@ বর্গক্ষেত্র_মোড, 'কেবলমাত্র_ফুল্ল_গ্রুপ_বি', ''));";); "; যদি "SET NAMES 'utf8' এর মতো দুটি ক্যোয়ারী ব্যবহার করা হয়; এসটিএসএল এসএমএল_মডি ..." এটি ছুঁড়ে দেয় "সাধারণ ত্রুটি: 2014 অন্যান্য অফলিত প্রশ্নের সক্রিয় থাকা অবস্থায় কোয়েরিগুলি কার্যকর করতে পারে না।"
ভেন্টজি কুনেভ

@ ভেন্টজিকুনভ দয়া করে এই পরামর্শটি অনুসরণ করবেন না এবং SET NAMESএই পদ্ধতিটি ব্যবহার না করে সেট করবেন না , বেশিরভাগ ক্ষেত্রে এটি ইতিমধ্যে ডায়ল্ট্রিন.ডাবাল.কমারসেট কোফনিগের মাধ্যমে সিম্ফনি সেট করার প্রয়োজন নেই: symfony.com/doc/current/references/configration/doctrine.html , এবং এটি পিডিও ডিএনএসের মাধ্যমে সঠিকভাবে করে, সেট নামগুলি এটি করার পুরানো উপায়, যা পিএইচপি সংস্করণ 5.3 এর চেয়ে বেশি ব্যবহার করা উচিত নয়
এলপোডলস্কি

39

চালু:

  • উবুন্টু 14.04
  • mysql Ver 14.14 ডিস্ট্রিবিউট 5.7.16, লিনাক্সের জন্য (x86_64) এডিটলাইন র‌্যাপার ব্যবহার করে

না:

$ sudo nano /etc/mysql/conf.d/mysql.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

ফাইলের নীচে

$ sudo service mysql restart

মাইএসকিএল.সিএনএফ কোনও মাইএসকিএল আপডেট দ্বারা ওভাররাইট করা যাবে না?
সিওয়াইওয়ালার

1
@cWisperer /etc/mysql/mysql.cnf2 টি কনফিগারেশন ফোল্ডার !includedir /etc/mysql/conf.d/+ দেখায় !includedir /etc/mysql/mysql.conf.d/। একই জন্য যায় /etc/mysql/my.cnf। সুতরাং আমি ধরে নিয়েছি যে কনফিগারেশন ফাইলগুলি আপডেটের পরে ওভাররাইড করা হয় না। আপনি এখানে আরও পড়তে পারেনhttp://dev.mysql.com/doc/mysql/en/server-system-variables.html
জাদেয়

আমি এটি চেষ্টা করেছি এবং এটি উবুন্টু 18.04.2 বায়োনিকে কাজ করে নি। আমি এটি অনুসরণ করেছিলাম এবং এটি কাজ করেছে: sitepoint.com/… - স্পেস এবং কোট সহ এই ফর্ম্যাটটি ব্যবহার করা গুরুত্বপূর্ণ: sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"সম্ভবত এর /etc/mysql/mysql.conf.d/mysqld_mode.cnfপরিবর্তে একটি নতুন ফাইল তৈরি করা গুরুত্বপূর্ণ
রুব 77

এটি মাইএসকিএল সার্ভার পুনরায় চালু হওয়ার পরেও কাজ করে
অক্ষয় খালে

36

আমি লক্ষ করেছি যে @ ইয়ে ওকন ইও সমাধান মাইএসকিউএল সার্ভারটি আরম্ভ না করা ততক্ষণ কাজ করে, তারপরে ডিফল্ট সেটিংস পুনরুদ্ধার করা হয়। এখানে একটি স্থায়ী সমাধান যা আমার পক্ষে কাজ করেছে:

নির্দিষ্ট এসকিউএল মোডটি সরাতে (এই ক্ষেত্রে কেবলমাত্র_এইফএলএলল_গ্রোপ_বিওয়াই ), বর্তমান এসকিউএল মোডটি সন্ধান করুন:

SELECT @@GLOBAL.sql_mode;

ফলাফলটি অনুলিপি করুন এবং যা আপনার প্রয়োজন হবে না তা থেকে মুছে ফেলুন ( কেবলমাত্র_ফুলল_গ্রো_পি )

উদাহরণ:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

প্রতি

STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

এই ফাইলটি তৈরি এবং খুলুন:

/etc/mysql/conf.d/disable_strict_mode.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

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

sudo service mysql restart

অথবা আপনি ANY_VALUE()কেবলমাত্র প্রত্যাখ্যানকে দমন করতে ব্যবহার করতে পারেন ONLY_FULL_GROUP_BY মান প্রত্যাখ্যান, আপনি এটি সম্পর্কে এখানে আরও পড়তে পারেন


3
আপANY_VALUE()
Sithu

25

মাইএসকিউএল ডকুমেন্টেশন নিম্নলিখিত পদ্ধতি নির্দিষ্ট করে:

  • sql-mode="<modes>"My.cnf (ইউনিক্স অপারেটিং সিস্টেম) বা my.ini (উইন্ডোজ) এর মতো একটি বিকল্প ফাইলে সেট করুন ।
  • কমান্ড লাইনের মাধ্যমে সার্ভার স্টার্টআপে এসকিউএল মোড সেট করতে, --sql-mode="<modes>"বিকল্পটি ব্যবহার করুন ।

* <modes>কমা দ্বারা বিভক্ত বিভিন্ন মোডের একটি তালিকা।

এসকিউএল মোডকে স্পষ্টভাবে সাফ করতে, --sql-mode=""কমান্ড লাইনে বা sql-mode=""কোনও বিকল্প ফাইলে এটি একটি খালি স্ট্রিংয়ে সেট করুন।

আমি sql-mode=""বিকল্পটি যুক্ত করেছি /etc/my.cnfএবং এটি কার্যকর হয়েছে।

এই এসও সমাধানটি মাইএসকিউএল দ্বারা কোন মাই সিএনএফ ফাইল ব্যবহার করছে তা নির্ধারণের উপায়গুলি নিয়ে আলোচনা করে।

পরিবর্তনগুলি করার পরে মাইএসকিউএল পুনরায় চালু করতে ভুলবেন না।


1
এটি আমার জন্য সঠিক উত্তর `ভের ১৪.১৪ ডিস্ট্রিবিউট 7.7.১০, ওএসএক্স ১০.১১ (x86_64) এর জন্য Sin
সিনুক্স

এটি সঠিক উত্তর চিহ্নিত করা উচিত। অন্যান্য উত্তরগুলি স্থায়ী সমাধান দেয় না।
সিজপেকস

@ br3nt আমি কীভাবে বর্তমান মোডগুলি ব্যবহার করব তা কীভাবে সনাক্ত করব যাতে আমি সমস্ত মোডগুলি আনসেট না করতে চাইলে অনাকাঙ্ক্ষিত মোডগুলি সরিয়ে ফেলতে পারি?
সিমিনাইজার

1
চেষ্টা করুনSELECT @@GLOBAL.sql_mode;
br3nt

19

আপনি যদি WAMP ব্যবহার করেন। ডাব্লুএএমএএমপি আইকনে বাম ক্লিক করুন তারপরে মাইএসকিউএল -> মাইএসকিউএল সেটিংস -> এসকিএল-মোড এবং তারপরে স্কেল-মোড-> ব্যবহারকারী মোডটি নির্বাচন করুন

এই চিত্রটি চেকআউট করুন


আমার ডাব্লুএমএপি ইনস্টলটিতে আমার মাইএসকিউএল সেটিংস না থাকার কোনও কারণ আছে কি? পরিষেবা প্রশাসন এবং মাইএসকিউএল কনসোল রয়েছে কিন্তু কোনও সেটিংস নেই?
ক্রেগ

আমি ঠিক এটিই খুঁজছিলাম! একটি সাধারণ ডাব্লুএএমএপি সার্ভার সমাধান সরবরাহ করার জন্য ধন্যবাদ! এই টিউটোরিয়ালে # গ্রেগেশন করার চেষ্টা করার সময় আমার এটি দরকার ছিল: youtu.be/HXV3zeQKqGY?t=9718
এরিক হিপারল - CodeSlayer2010

12

আমার স্কয়ারে (ম্যাক ওএস এক্সে চলিত সংস্করণ 5.7.11) মাইএসকিএল শেল ক্লায়েন্টে আমার জন্য এই কাজটি:

SET
@@GLOBAL.sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

মাইএসকিউএল 5.6 ডকুমেন্টেশন অনুসারে, sql_mode ডিফল্ট হয়

মাইএসকিউএল 5.6.5 এ ফাঁকা স্ট্রিং

mysql 5.6 রেফারেন্স


অন্যান্য উত্তরগুলি sql_mode := ''সম্ভব বলে দাবি করেছে। আপনি একমত না কেন?
হারমান ডাপ্পেস

আপনার স্ট্রিংয়ের সেই সমস্ত বিকল্পগুলি কোথা থেকে এসেছে? এর পিছনে যুক্তি কী?
হারমান ডাপ্পেস

মাইএসকিউএল 5.6 ডকুমেন্টেশন অনুসারে, এসকিউএল_মোডটি ডিফল্ট মাইএসকিউএল 5.6.5 এ ফাঁকা স্ট্রিং এবং পিছনে NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES 5.6.6 dev.mysql.com/doc/refman/5.6/en/…
সালভাতোর নেপোলি

ধন্যবাদ আমার জন্য উবুন্টু 16.04 - মাইএসকিএল ভের 14.14 ডিস্ট্রিবিউ 5.7.18 এ, এডিটলাইন মোড়ক ব্যবহার করে লিনাক্সের জন্য (x86_64)
পল প্রিবিচ

12

মাইএসকিউএল 5.7 এবং উবুন্টু 16.04 এ, mysql.cnf ফাইলটি সম্পাদনা করুন।

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

নীচের মত স্ক্যালি_মোড অন্তর্ভুক্ত করুন এবং ফাইলটি সংরক্ষণ করুন।

[mysql]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

এটি লক্ষ করুন, আমার ক্ষেত্রে, আমি মোডটি সরানো হয়েছে STRICT_TRANS_TABLES এবং কেবলমাত্র_ফুলL_GROUP_BY।

এটি করার ফলে এটি স্থায়ীভাবে মোড কনফিগারেশন সংরক্ষণ করবে। অন্যথায় যদি আপনি কেবল মাইএসকিউএল এর মাধ্যমে @@ এসকিএল_মোড আপডেট করেন তবে এটি মেশিন / পরিষেবা পুনঃসূচনাতে পুনরায় সেট হবে।

এর পরে, পরিবর্তিত কনফিগারেশনে কার্যকর পদক্ষেপ নেওয়ার জন্য, মাইএসকিএল পরিষেবাটি পুনরায় চালু করুন:

$ sudo service mysql restart

মাইএসকিএল অ্যাক্সেস করার চেষ্টা করুন:

$ mysql -u user_name -p

আপনি যদি লগইন করতে এবং মাইএসকিউএল কনসোল অ্যাক্সেস করতে সক্ষম হন তবে এটি ঠিক আছে। গ্রেট!

কিন্তু , যদি আমার মত, আপনার ত্রুটিটি মুখোমুখি "অজানা পরিবর্তনশীল sql_mode" যা নির্দেশ করে যে, sql_mode জন্য একটি বিকল্প mysqld , আপনি ফিরে, আবার যেতে সম্পাদন করা ফাইল mysql.cnf এবং পরিবর্তন থাকবে [mysql]করার [mysqld]। মাইএসকিউএল পরিষেবাটি পুনরায় চালু করুন এবং মাইএসকিউএল কনসোলে লগইন করার চেষ্টা করে একটি শেষ পরীক্ষা করুন। এটা এখানে!


1
@ অ্যালেক্সানড্রে-রিবেইরোকে ধন্যবাদ, আমি অধিবেশনটিতে এটি স্থাপনের চেয়ে পূর্বোক্ত পদ্ধতির দৃ strongly়তার সাথে সুপারিশ করব। যারা উবুন্টু 16,04 এবং মাইএসকিউএল 5.7.x, ভালো সম্পাদনার ফাইল আছে এবং এন্টার জন্য স্টার নির্দেশ sql_mode = <মোড> অধীনে [mysqld] গ্রুপ, বিরুদ্ধে প্রকাশক হিসাবে [মাইএসকিউএল] আমার অভিজ্ঞতা অনুযায়ী, কাজ করে না।
কোডারিয়র

আমার মাইএসকিউএল 5.7.22 আছে। এটি অদ্ভুত, তবে এটি কাজ করার জন্য আমাকে উপরে দেখানো মাই সিএনএফ-তে স্কেল_মোড ডিক্লেয়ারেশন থেকে STRICT_TRANS_TABLES এবং ONLY_FULL_GROUP_BY উভয়ই সরিয়ে ফেলতে হয়েছিল । বাস্তবে, আমি কেবলমাত্র ONLY_FULL_GROUP_BY মোডটি সরাতে চাই। যদি আমি "গ্লোবাল / সেশন sql_mode = ..." করি তবে আমি এটি কার্যকর করার জন্য কেবল STRICT_TRANS_TABLES অপসারণ না করে কেবলমাত্র ওয়ানওয়াই_ফুল_আগ্রো_বিই সরিয়ে ফেলতে পারি। তবে যেহেতু এটি পুনরায় আরম্ভ হয় না, তাই এটি আমার বেশি ব্যবহার হয় না।
রায়চ

12

এটিই আমি মাইএসকিএল ওয়ার্কবেঞ্চ ঠিক করতে পেরেছি:

আমি নিচের কমান্ডের সাথে বর্তমান মানটি পাওয়ার আগে

SELECT @@sql_mode 

পরে আমি তালিকা থেকে ONLY_FULL_GROUP_BY কী সরিয়েছি এবং নীচের কমান্ডটি আমি আটকালাম

SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

10

ম্যাক ওএস মোজাভে (10.14) ওপেন টার্মিনালের জন্য

$ sudo mkdir /usr/local/mysql-5.7.24-macos10.14-x86_64/etc
$ cd /usr/local/mysql-5.7.24-macos10.14-x86_64/etc
$ sudo nano my.cnf

নিম্নলিখিত পেস্ট করুন:

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

সংরক্ষণ করুন & থেকে প্রস্থান করুন সিঙ্গুরের Shortkeys: Ctrl+xএবং yএবংEnter

দ্রষ্টব্য: আপনারmysql-5.7.24-macos10.14-x86_64এই কমান্ডগুলিতেআপডেট করার প্রয়োজন হতে পারে, কেবলমাত্র আপনার ভিতরে থাকা সঠিক ফোল্ডারের নামটি পরীক্ষা করুন/usr/local/

আশা করি এটি কারও সাহায্য করবে!


10

এতে মোডগুলি যুক্ত বা সরান sql_mode

মাইএসকিউএল 5.7.9 বা তারপরে

এ থেকে কোনও মোড যুক্ত করতে বা মুছতে sql_modeআপনি ব্যবহার করতে পারেন list_addএবং list_dropফাংশন করতে পারেন ।

বর্তমান থেকে একটি মোড অপসারণ SESSION.sql_modeকরতে, আপনি নিম্নলিখিতগুলির একটি ব্যবহার করতে পারেন:

SET SESSION sql_mode = sys.list_drop(@@SESSION.sql_mode, 'ONLY_FULL_GROUP_BY');
SET sql_mode = sys.list_drop(@@sql_mode, 'ONLY_FULL_GROUP_BY');
SET @@sql_mode = sys.list_drop(@@sql_mode, 'ONLY_FULL_GROUP_BY');

পরিষেবাটি আরম্ভ না হওয়া অবধি GLOBAL.sql_modeবর্তমান রানটাইম ক্রিয়াকলাপ থেকে স্থিত থাকা থেকে এমন একটি মোড সরাতে ।

SET GLOBAL sql_mode = sys.list_drop(@@GLOBAL.sql_mode, 'ONLY_FULL_GROUP_BY');

মাইএসকিউএল 5.7.8 বা তার আগের

যেহেতু sql_modeমানটি একটি সিএসভি পংক্তির স্ট্রিং, আপনার এটি নিশ্চিত করতে হবে যে স্ট্রিংটিতে অবশিষ্টাংশ কমা নেই, যা ব্যবহার করে সম্পন্ন করা যেতে পারে TRIM(BOTH ',' FROM ...)

sql_modeভেরিয়েবল থেকে কোনও মোড অপসারণ করতে , কোনও অবশিষ্ট অবরুদ্ধ কমা অপসারণ হয়েছে তা নিশ্চিত করার জন্য আপনি REPLACE()পাশাপাশি ব্যবহার করতে চান TRIM()want

SET SESSION sql_mode = TRIM(BOTH ',' FROM REPLACE(@@SESSION.sql_mode, 'ONLY_FULL_GROUP_BY', ''));
SET GLOBAL sql_mode = TRIM(BOTH ',' FROM REPLACE(@@GLOBAL.sql_mode, 'ONLY_FULL_GROUP_BY', ''));

চলকটিতে একটি মোড যুক্ত করতে sql_mode, আপনি CONCAT_WS(',', ...)বর্তমান মোডের সাথে একটি কমা যুক্ত TRIM()হয়েছে তা নিশ্চিত করতে এবং যে কোনও অবশিষ্ট কোমা অপসারণ হয়েছে তা নিশ্চিত করতে আপনি ব্যবহার করতে চান would

SET SESSION sql_mode = TRIM(BOTH ',' FROM CONCAT_WS(',', 'ONLY_FULL_GROUP_BY', @@SESSION.sql_mode));
SET GLOBAL sql_mode = TRIM(BOTH ',' FROM CONCAT_WS(',', 'ONLY_FULL_GROUP_BY', @@GLOBAL.sql_mode));

দ্রষ্টব্য: নতুন সংযোগ স্থাপন না হওয়া অবধি ভেরিয়েবল পরিবর্তন করা চলকটিতে প্রচার GLOBALকরে নাSESSION

GLOBALযতক্ষণ না চলমান সেবা পুনরায় আরম্ভ করা হয় পরিবর্তনশীল জিদ করা হবে।

SESSIONপরিবর্তনশীল, বর্তমান সংযোগের জন্য জিদ করা পর্যন্ত সংযোগ বন্ধ করা হবে এবং একটি নতুন সংযোগ স্থাপন করা হয়।


প্রত্যাবর্তিত করতে GLOBAL.sql_mode

যেহেতু সংশোধক SET sql_mode = 'ONLY_FULL_GROUP_BY';ছাড়াই কার্যকর করা হয়েছিল GLOBAL, পরিবর্তনটি কেবলমাত্র বর্তমান SESSIONরাষ্ট্রীয় মানকেই প্রভাবিত করে , যা এর সাথে সম্পর্কিত @@sql_mode। এটি মুছে ফেলার জন্য এবং সার্ভার পুনরায় আরম্ভের মানটিতে গ্লোবাল ডিফল্টে ফিরে যেতে , আপনি এর থেকে মানটি ব্যবহার করতে চান @@GLOBAL.sql_mode[সিক]

বর্তমান SESSIONমানটি কেবল বর্তমান সংযোগের জন্য বৈধ। সার্ভারের সাথে পুনরায় সংযোগ স্থাপনের ফলে মানটি মানটিতে ফিরে আসবে GLOBAL

বর্তমান সেশন রাষ্ট্রের মানটিকে বর্তমান বৈশ্বিক মানে ফেরাতে, আপনি নিম্নলিখিতগুলির একটি ব্যবহার করতে পারেন:

SET SESSION sql_mode = @@GLOBAL.sql_mode;
SET @@sql_mode = @@GLOBAL.sql_mode;
SET sql_mode = @@GLOBAL.sql_mode;

SESSION.sql_modeমান পরিবর্তন করুনONLY_FULL_GROUP_BY

SET sql_mode = 'ONLY_FULL_GROUP_BY';
SELECT @@sql_mode, @@GLOBAL.sql_mode;
+--------------------+----------------------------------------------+
| @@sql_mode         | @@GLOBAL.sql_mode                            |
+--------------------+----------------------------------------------+
| ONLY_FULL_GROUP_BY | NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION |
+--------------------+----------------------------------------------+

প্রত্যাবর্তন SESSION.sql_modeমান GLOBAL.sql_modeমান

SET sql_mode = @@GLOBAL.sql_mode;
SELECT @@sql_mode, @@GLOBAL.sql_mode;
+----------------------------------------------+----------------------------------------------+
| @@sql_mode                                   | @@GLOBAL.sql_mode                            |
+----------------------------------------------+----------------------------------------------+
| NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION | NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION |
+----------------------------------------------+----------------------------------------------+

সার্ভার পুনঃসূচনা স্থির sql_mode

সার্ভার প্রারম্ভকালে এসকিউএল মোড সেট করতে , --sql-mode="modes"কমান্ড লাইনের বিকল্পটি ব্যবহার করুন , অথবা sql-mode="modes"অপশন ফাইলে যেমন মাই সিএনএফ (ইউনিক্স অপারেটিং সিস্টেম) বা মাই.inআই (উইন্ডোজ) ব্যবহার করুন। [সিক]

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

[mysqld]

sql-mode="NO_ENGINE_SUBSTITUTION" #default <= 5.7.4

ডিফল্ট sql_modeমান

যেহেতু প্রতি সংস্করণ মানগুলি মাইএসকিউএল ডকুমেন্টেশন মুছে ফেলা হয়েছে, তাই আমি আপনার রেফারেন্সের জন্য সেগুলি এখানে যুক্ত করেছি।

  • মাইএসকিউএল ৮.০ [sic]
  • মাইএসকিউএল 5.7 [sic]
  • মাইএসকিউএল 5.6 [sic]

মাইএসকিউএল> = 8.0.11 8.0.5 - 8.0.10 এড়িয়ে গেছেন

ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_ENGINE_SUBSTITUTION

মাইএসকিউএল> = 5.7.8, <= 8.0.4

ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION

মাইএসকিউএল 5.7.7

ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION

মাইএসকিউএল> = 5.7.5, <= 5.7.6

ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ENGINE_SUBSTITUTION

মাইএসকিউএল> = 5.6.6, <= 5.7.4

NO_ENGINE_SUBSTITUTION

মাইএসকিউএল <= 5.6.5

''

8

আপনি যদি মাইএসকিউএল 8.0.11 ব্যবহার করেন তবে আপনাকে স্কুয়েল-মোড থেকে 'NO_AUTO_CREATE_USER' অপসারণ করতে হবে।

ফাইল /etc/mysql/my.cnfএবং [mysqld] শিরোনামে নিম্নলিখিত লাইন যুক্ত করুন

[mysqld]

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

এখনও অবধি এই উত্তরটি 8.0.13
টোমেক্সসান

7

আমি মতবাদটি ব্যবহার করছি এবং আমি আমার মতবাদ.লোকাল.এফপিতে ড্রাইভারঅপশন যুক্ত করেছি:

return array(
'doctrine' => array(
    'connection' => array(
        'orm_default' => array(
            'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
            'params' => array(
                'host' => 'localhost',
                'port' => '3306',
                'user' => 'myusr',
                'password' => 'mypwd',
                'dbname' => 'mydb',
                'driverOptions' => array(
                    PDO::MYSQL_ATTR_INIT_COMMAND => "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"
                ),
            ),
        ),
    ),
));

পিএইচপিএমইডমিনে ব্যবহারকারীর সুবিধায় SUPER সক্রিয় করা দরকার।


3
মতবাদ কনফিগার করার জন্য ইয়ামল স্বরলিপি ব্যবহার করে (যেমন সিমফোনিতে করা হয়েছে) আপনার ধ্রুবক "PDO :: MYSQL_ATTR_INIT_COMMAND" এর পরিবর্তে "1002" ব্যবহার করা উচিত, তবে তবুও আমি এটি কয়েক সপ্তাহ আগে খুঁজছিলাম এবং খুঁজে পাইনি is বাইরে। আপনার সমাধানের জন্য ধন্যবাদ! আমার জন্য কাজ করেছেন।
আরভিদ

5

যাদের সাথে একটি VPS / সার্ভার চলমান করার জন্য cPanel / WHM , আপনি স্থায়ীভাবে অক্ষম করে ONLY_FULL_GROUP_BY নিম্নলিখিত কি করতে পারেন

আপনার রুট অ্যাক্সেস প্রয়োজন (কোনও ভিপিএস বা উত্সর্গীকৃত সার্ভারে)

  1. রুট হিসাবে WHM লিখুন এবং phpMyAdmin চালান

  2. চলকগুলিতে ক্লিক করুন, অনুসন্ধান sql_modeকরুন, 'সম্পাদনা' এ ক্লিক করুন এবং সেই পাঠ্যবাক্সের ভিতরে পুরো লাইনটি অনুলিপি করুন

যেমন এটি অনুলিপি করুন:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  1. এসএফটিপি - এসএসএইচ (রুট) এর মাধ্যমে আপনার সার্ভারের সাথে সংযোগ স্থাপন করুন এবং ফাইলটি ডাউনলোড করুন /etc/my.cnf

  2. my.cnfআপনার স্থানীয় পিসিতে একটি পাঠ্য সম্পাদক ফাইল দিয়ে খুলুন এবং এতে ( [mysqld]বিভাগের অধীনে ) আপনি স্টেপ (২) এ অনুলিপি করেছেন এমন সম্পূর্ণ লাইনটি আটকে দিন তবে সরানONLY_FULL_GROUP_BY,

যেমন এটি পেস্ট করুন:

# disabling ONLY_FULL_GROUP_BY
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. my.cnfফাইলটি সংরক্ষণ করুন এবং এটিকে আবার আপলোড করুন/etc/

  2. WHM লিখুন এবং "WHM> পুনঃসূচনা পরিষেবাদি> এসকিউএল সার্ভার (মাইএসকিউএল)" এ যান এবং পরিষেবাটি পুনঃসূচনা করুন


4

আমি মাইএসকিএল নিয়ে কাজ করছি এবং রুট ব্যবহারকারীর সাথে নিবন্ধীকৃত, আমার জন্য কাজ করা সমাধানটি নিম্নলিখিত:

mysql> SET SESSION sql_mode = (নির্বাচন করুন প্রতিস্থাপন (এমপিএইচএইচএল_মোড, 'কেবলমাত্র_ফুল্ল_GROUP_BY', ''));


3

এটি উবুন্টু 14+ তে মাইএসকিএল 5.7+ এর স্থায়ী সমাধান:

$ sudo bash -c "echo -e \"\nsql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\"  >> /etc/mysql/mysql.conf.d/mysqld.cnf"
$ sudo service mysql restart
# Check if login attempt throws any errors
$ mysql -u[user] -p # replace [user] with your own user name

আপনি যদি ত্রুটি ছাড়াই লগইন করতে সক্ষম হন - আপনার এখনই সব সেট করা উচিত।


1

আপনি কনফিগার ফাইলটি ব্যবহার করে এটি অক্ষম করতে পারেন my.cnf:

$ mysql --verbose --help | grep my.cnf

ম্যাকোস 10.12 তে তাই এটি usr/local/etc/my.cnf। আপনি sql_modeএখানে সম্পাদনা করতে পারেন :

# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
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

Phpmyadmin ড্যাশবোর্ডের মাধ্যমে MySQL কনফিগারেশন পরিবর্তন করার জন্য আমার সমাধানটি এখানে দেওয়া হয়েছে:

"এটি sql_mode = কেবল_ সম্পূর্ণ_গ্রুপ_বাইয়ের সাথেই বেমানান" ঠিক করতে: phpmyadmin এবং গেটো হোম পৃষ্ঠা খুলুন এবং 'ভেরিয়েবল' সাবমেনু নির্বাচন করুন। স্কয়ার মোডটি খুঁজতে নীচে স্ক্রোল করুন। এসকিএল মোড সম্পাদনা করুন এবং এটি সংরক্ষণ করুন 'ONLY_FULL_GROUP_BY' এটি সংরক্ষণ করুন।


0

মাইএসকিউএল সংস্করণ 5.7.28 ব্যবহার করে
SELECT @@sql_mode; আপডেট করে চেক করুন

SET @@sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.