[mysql] 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옵션 없이이 목록으로 설정하십시오 .


답변

이것을 시도하십시오 :

SET sql_mode = ''

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


답변

    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;


답변

기존 모드를 제거하지 않고 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',''))"

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