Programming

ONLY_FULL_GROUP_BY 사용 안함

procodes 2020. 2. 11. 22:42
반응형

ONLY_FULL_GROUP_BY 사용 안함


실수로 다음과 같이 ONLY_FULL_GROUP_BY 모드를 활성화했습니다.

SET sql_mode = 'ONLY_FULL_GROUP_BY';

비활성화하려면 어떻게합니까?


해결 방법 1 : MySQL 콘솔에서 ONLY_FULL_GROUP_BY 제거

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

여기서 더 읽을 수 있습니다

해결 방법 2 : phpmyadmin에서 ONLY_FULL_GROUP_BY 제거

  • phpmyadmin을 열고 localhost를 선택하십시오
  • 메뉴 변수를 클릭하고 SQL 모드에서 아래로 스크롤하십시오.
  • 편집 버튼을 클릭하여 값을 변경하고 ONLY_FULL_GROUP_BY를 제거 하고 저장을 클릭하십시오.여기에 이미지 설명을 입력하십시오

최신 정보:

여기에 이미지 설명을 입력하십시오

현재 mysql 설정을 유지하고 비활성화하려면 ONLY_FULL_GROUP_BYphpmyadmin 또는 사용중인 클라이언트를 방문하여 다음을 입력하십시오.

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이 GROUP BY 절에 없으며 GROUP BY 절의 열에 기능적으로 종속되지 않는 집계되지 않은 열 'db.table.COL'을 포함합니다. 이는 sql_mode = only_full_group_by와 호환되지 않습니다. "다음 단계를 수행하십시오.

  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 MySQL을 다시 시작하려면

모든 사용자에 ONLY_FULL_GROUP_BY대해 비활성화 됩니다


조심해서 사용하십시오

SET sql_mode = '' 

실제로 활성화 된 모든 모드가 지워집니다. 다른 설정을 엉망으로 만들지 않으려면

SELECT @@sql_mode 

먼저 쉼표로 구분 된 모드 목록을 활성화하려면 ONLY_FULL_GROUP_BY옵션 없이이 목록으로 설정하십시오 .


    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;

이것을 시도하십시오 :

SET sql_mode = ''

커뮤니티 참고 : 아래 답변에서 지적했듯이 실제로 현재 활성화 된 모든 SQL 모드 가 지워 집니다. 그것은 반드시 당신이 원하는 것이 아닐 수도 있습니다.


기존 모드를 제거하지 않고 sql_mode에 하나의 모드 만 추가 :

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-individual-sql-modes.html


@cwhisperer에게 감사합니다. Symfony 앱에서 Doctrine과 동일한 문제가있었습니다. 방금 config.yml에 옵션을 추가했습니다.

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

이것은 나를 위해 잘 작동했습니다.


의 위에:

  • 우분투 14.04
  • EditLine 래퍼를 사용하는 Linux (x86_64) 용 mysql Ver 14.14 Distrib 5.7.16

하다:

$ 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

@Eyo Okon Eyo 솔루션은 MySQL 서버가 다시 시작되지 않으면 기본 설정이 복원되는 한 작동합니다. 나를 위해 일한 영구적 인 해결책은 다음과 같습니다.

특정 SQL 모드 (이 경우 ONLY_FULL_GROUP_BY ) 를 제거하려면 현재 SQL 모드를 찾으십시오.

SELECT @@GLOBAL.sql_mode;

결과를 복사하고 필요없는 것을 제거하십시오 ( ONLY_FULL_GROUP_BY )

예 :

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

새 SQL 모드를 작성하여 붙여 넣으십시오.

[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

MySQL을 다시 시작하십시오.

sudo service mysql restart

또는 ANY_VALUE()ONLY_FULL_GROUP_BY 값 거부를 억제 하는 사용할 수 있습니다. 여기에 대한 자세한 내용은 여기를 참조하십시오.


MySQL의 문서는 또한 다음과 같은 방법을 지정합니다 :

  • sql-mode="<modes>"my.cnf (Unix 운영 체제) 또는 my.ini (Windows)와 같은 옵션 파일에서 설정하십시오 .
  • 명령 행을 통해 서버 시작시 SQL 모드를 설정하려면 --sql-mode="<modes>"옵션을 사용하십시오 .

* <modes>쉼표로 구분 된 다른 모드 목록이 있습니다.

SQL 모드를 명시 적으로 지우려면 --sql-mode=""명령 행 또는 sql-mode=""옵션 파일을 사용하여 빈 문자열로 설정 하십시오.

sql-mode=""옵션을 추가하고 /etc/my.cnf작동했습니다.

이 SO 솔루션 에서는 MySQL에서 사용중인 my.cnf 파일을 찾는 방법에 대해 설명합니다.

변경 후 MySQL을 다시 시작하는 것을 잊지 마십시오.


WAMP를 사용하는 경우 WAMP 아이콘을 마우스 왼쪽 버튼으로 클릭하고 MySQL-> MySQL 설정-> sql-mode로 이동 한 다음 sql-mode-> user mode를 선택하십시오.

이 이미지를 확인


내 SQL (Mac OS X에서 실행되는 버전 5.7.11)에서는 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 5.6 Documentation에 따르면 sql_mode는 기본값입니다.

MySQL 5.6.5의 빈 문자열 및 5.6.6의 NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES +

MySQL 5.6 참조


MySQL 5.7 및 Ubuntu 16.04에서 mysql.cnf 파일을 편집하십시오.

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

다음과 같이 sql_mode를 포함시키고 파일을 저장하십시오.

[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 모드와 ONLY_FULL_GROUP_BY 모드를 제거했습니다.

이렇게하면 모드 구성이 영구적으로 저장됩니다. MySQL을 통해 @@ sql_mode를 업데이트하는 경우와는 달리 머신 / 서비스를 다시 시작할 때 재설정되기 때문입니다.

그런 다음 수정 된 구성을 수행하여 mysql 서비스를 다시 시작하십시오.

$ sudo service mysql restart

mysql에 액세스하십시오 :

$ mysql -u user_name -p

MySQL 콘솔에 로그인하여 액세스 할 수 있으면 문제가 없습니다. 큰!

그러나 나와 같은 경우 sql_modemysqld 의 옵션 임을 나타내는 "알 수없는 변수 sql_mode" 오류가 발생 하면 다시 돌아가서 mysql.cnf 파일을 다시 편집하고를 변경해야 합니다 . MySQL 서비스를 다시 시작하고 MySQL 콘솔에서 로그인을 시도하는 마지막 테스트를 수행하십시오. 여기있어![mysql][mysqld]


이것이 Mysql Workbench에서 수정하기 위해 수행 한 것입니다.

아래 명령으로 현재 값을 얻기 전에

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'

MySQL 8.0.11을 사용하는 경우 sql-mode에서 '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

Mac OS Mojave (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+xyEnter

참고 :mysql-5.7.24-macos10.14-x86_64 이 명령으로 업데이트해야 할 수도 있습니다. 정확한 폴더 이름을 확인하십시오./usr/local/

그것이 누군가를 도울 수 있기를 바랍니다!


나는 교리를 사용하고 있으며 doctrine.local.php에 driverOptions를 추가했습니다.

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',''))"
                ),
            ),
        ),
    ),
));

phpmyadmin에서 사용자는 특권에서 SUPER을 활성화해야합니다.


cPanel / WHM 과 함께 VPS / Server를 실행중인 사용자는 다음을 수행하여 ONLY_FULL_GROUP_BY를 영구적으로 비활성화 할 수 있습니다

루트 액세스 권한이 필요합니다 (VPS 또는 전용 서버에서)

  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. Connect to you server via SFTP - SSH (root) and download the file /etc/my.cnf

  2. Open with a text editor my.cnf file on your local PC and paste into it (under [mysqld] section) the entire line you copied at step (2) but remove ONLY_FULL_GROUP_BY,

e.g. paste this:

# 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. Save the my.cnf file and upload it back into /etc/

  2. Enter WHM and go to "WHM > Restart Services > SQL Server (MySQL)" and restart the service


This is a permanent solution for MySql 5.7+ on Ubuntu 14+:

$ 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

If you are able to login without errors - you should be all set now.


Im working with mysql and registered with root user, the solution that work for me is the following:

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


You can disable it using the config file my.cnf :

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

따라서 macOS 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"

다음은 phpmyadmin 대시 보드를 통해 Mysql 구성을 변경하는 솔루션입니다.

"sql_mode = only_full_group_by와 호환되지 않습니다"를 수정하려면 : phpmyadmin을 열고 홈 페이지로 이동하여 '변수'하위 메뉴를 선택하십시오. 아래로 스크롤하여 SQL 모드를 찾으십시오. SQL 모드를 편집하고 'ONLY_FULL_GROUP_BY'를 제거하십시오. 저장하십시오.

참고 URL : https://stackoverflow.com/questions/23921117/disable-only-full-group-by



반응형