Ativei acidentalmente o modo ONLY_FULL_GROUP_BY assim:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
Como faço para desativá-lo?
mysql
mysql-workbench
ZviBar
fonte
fonte
SET sql_mode = ''
?column
função ANY_VALUE ( ) para atualizar sua consulta. Veja doc aquiRespostas:
Solução 1: Remova o ONLY_FULL_GROUP_BY do console mysql
você pode ler mais aqui
Solução 2: Remova o ONLY_FULL_GROUP_BY do phpmyadmin
fonte
REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')
, o MySQL remove as vírgulas indesejadas do registro. A resposta do OP está correta.GLOBAL
não funcionou para mim, masSESSION
funcionou.SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Atualizar:
Para manter suas configurações atuais do mysql e desativar
ONLY_FULL_GROUP_BY
, sugiro visitar seu phpmyadmin ou qualquer outro cliente que você esteja usando e digite:SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','') copy_me
próximo resultado da cópia para o seu
my.ini
arquivo.hortelã :
sudo nano /etc/mysql/my.cnf
Ubuntu 16 e superior :
sudo nano /etc/mysql/my.cnf
ubuntu 14-16 :
/etc/mysql/mysql.conf.d/mysqld.cnf
Cuidado!
copy_me
O resultado pode conter um texto longo que pode ser aparado por padrão. Certifique-se de copiar o texto inteiro!resposta antiga:
Se você deseja desativar o erro permanentemente "A expressão nº N da lista SELECT não está na cláusula GROUP BY e contém a coluna não agregada 'db.table.COL', que não depende funcionalmente das colunas da cláusula GROUP BY; isso é incompatível com sql_mode = only_full_group_by "execute essas etapas:
sudo nano /etc/mysql/my.cnf
Adicione isso ao final do arquivo
sudo service mysql restart
reiniciar o MySQLIsso será desativado
ONLY_FULL_GROUP_BY
para TODOS os usuáriosfonte
/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
talvez não esteja nesse arquivo, ele pode estar em um diretório de inclusão. Use este comando primeiro:grep -R "\[mysqld\]" *
para ver o que há - e, nesse caso, tentegrep -R "\bsql_mode\b" *
Cuidado ao usar
Na verdade, isso limpa todos os modos atualmente ativados. Se você não quiser mexer com outras configurações, faça uma
primeiro, para ativar uma lista separada por vírgula dos modos, em seguida, defina-a nesta lista sem a
ONLY_FULL_GROUP_BY
opçãofonte
then SET it to this list without the ONLY_FULL_GROUP_BY option.
:?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';
sql_mode=<comma-separated-list>
, pare e inicie o servidor. Siga os documentos do seu sistema operacional para obter a localização e a melhor maneira de editar o my.cnf.Faça uma tentativa:
Nota da comunidade: Conforme indicado nas respostas abaixo, na verdade, ele limpa todos os modos SQL ativados no momento. Isso pode não ser necessariamente o que você deseja.
fonte
''
='full group by is disabled'
? O MySQL faz algumas coisas bem idiotas, mas essa está lá em cima.0 rows affected
e minha consulta ainda não funciona:Error Code: 1055. Expression #6 of SELECT list is not in GROUP BY clause and contains nonaggregated column ...
global
no comando .fonte
sql_mode
reversão para o valor anterior. O que eu posso fazer agora?Adicionando apenas um modo ao sql_mode sem remover os existentes:
Removendo apenas um modo específico do sql_mode sem remover outros:
No seu caso, se você deseja remover apenas o
ONLY_FULL_GROUP_BY
modo, use o comando abaixo:Referência: http://johnemb.blogspot.com/2014/09/adding-or-removing-individual-sql-modes.html
fonte
Graças a @cwhisperer. Eu tive o mesmo problema com o Doctrine em um aplicativo Symfony. Acabei de adicionar a opção ao meu config.yml:
Isso funcionou bem pra mim.
fonte
SET NAMES
usando esse método, na maioria dos casos não é necessário o symfony já o configurou via doctrine.dbal.charset cofnig: symfony.com/doc/current/reference/configuration/doctrine.html , e fá-lo corretamente via PDO dns, nomes conjunto é meio ultrapassada de fazer isso, que não deve ser usado para PHP versão maior do que 5,3Em:
Faz:
Copiar e colar:
Na parte inferior do arquivo
fonte
/etc/mysql/mysql.cnf
aponta para 2 pastas de configuração!includedir /etc/mysql/conf.d/
+!includedir /etc/mysql/mysql.conf.d/
. O mesmo vale para/etc/mysql/my.cnf
. Portanto, presumo que os arquivos de configuração não sejam substituídos na atualização. Você pode ler mais aquihttp://dev.mysql.com/doc/mysql/en/server-system-variables.html
sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
talvez seja importante para criar um novo arquivo/etc/mysql/mysql.conf.d/mysqld_mode.cnf
em vezPercebi que a solução @Eyo Okon Eyo funciona enquanto o servidor MySQL não for reiniciado, e as configurações padrão serão restauradas. Aqui está uma solução permanente que funcionou para mim:
Para remover o modo SQL específico (neste caso, ONLY_FULL_GROUP_BY ), localize o modo SQL atual:
copie o resultado e remova dele o que você não precisa ( ONLY_FULL_GROUP_BY )
por exemplo:
para
crie e abra este arquivo:
e escreva e cole nele seu novo modo SQL:
reinicie o MySQL:
Ou você pode usar
ANY_VALUE()
para suprimir a rejeição do valor ONLY_FULL_GROUP_BY, você pode ler mais sobre isso aquifonte
ANY_VALUE()
A documentação do MySQL também especifica os seguintes métodos:
sql-mode="<modes>"
em um arquivo de opções como my.cnf (sistemas operacionais Unix) ou my.ini (Windows).--sql-mode="<modes>"
opção* Onde
<modes>
está uma lista de modos diferentes separados por vírgulas.Para limpar o modo SQL explicitamente, defina-o como uma cadeia vazia usando
--sql-mode=""
na linha de comando ousql-mode=""
em um arquivo de opções.Eu adicionei a
sql-mode=""
opção/etc/my.cnf
e funcionou.Esta solução SO discute maneiras de descobrir qual arquivo my.cnf está sendo usado pelo MySQL.
Não se esqueça de reiniciar o MySQL após fazer alterações.
fonte
SELECT @@GLOBAL.sql_mode;
Se você estiver usando o WAMP. Clique com o botão esquerdo no ícone WAMP e vá para MySQL -> MySQL settings -> sql-mode e selecione sql-mode-> user mode
fonte
No meu sql (versão 5.7.11 executando no Mac OS X), este trabalho para mim no cliente shell mysql:
De acordo com a documentação do MySQL 5.6, sql_mode é o padrão é
string em branco no MySQL 5.6.5 e vice-versa NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES no 5.6.6 +
referência do mysql 5.6
fonte
sql_mode := ''
ser possíveis. Por que você discorda?No MySQL 5.7 e Ubuntu 16.04, edite o arquivo mysql.cnf.
Inclua o sql_mode como o seguinte e salve o arquivo.
Observe que, no meu caso, removi o modo STRICT_TRANS_TABLES e o ONLY_FULL_GROUP_BY.
Fazendo isso, ele salvará a configuração do modo permanentemente. Diferentemente, se você acabou de atualizar o @@ sql_mode através do MySQL, porque ele será redefinido na reinicialização da máquina / serviço.
Depois disso, para a configuração modificada entrar em ação, reinicie o serviço mysql:
Tente acessar o mysql:
Se você conseguir fazer login e acessar o console do MySQL, tudo bem. Ótimo!
MAS , se como eu, você enfrentará o erro "variável desconhecida sql_mode" , que indica que sql_mode é uma opção para o mysqld , você precisará voltar, editar o arquivo mysql.cnf novamente e alterar
[mysql]
para[mysqld]
. Reinicie o serviço MySQL e faça um último teste tentando efetuar login no console do MySQL. Aqui está!fonte
Isto é o que eu executei para corrigir no ambiente de trabalho Mysql:
Antes de eu obter o valor atual com o comando abaixo
depois removi a chave ONLY_FULL_GROUP_BY da lista e colei o comando abaixo
fonte
Para Mac OS Mojave (10.14) Terminal aberto
Cole o seguinte:
Shortkeys a Save & Exit nano:
Ctrl+x
ey
eEnter
Nota: Pode ser necessário atualizar
mysql-5.7.24-macos10.14-x86_64
esses comandos, basta verificar o nome da pasta correta que você possui/usr/local/
Espero que ajude alguém!
fonte
Adicionar ou remover modos para
sql_mode
MySQL 5.7.9 ou posterior
Para adicionar ou remover um modo
sql_mode
, você pode usarlist_add
elist_drop
funções.Para remover um modo da atual
SESSION.sql_mode
, você pode usar um dos seguintes:Para remover um modo do
GLOBAL.sql_mode
que persiste para a operação de tempo de execução atual , até que o serviço seja reiniciado .MySQL 5.7.8 ou anterior
Como o
sql_mode
valor é uma sequência de modos CSV, você precisará garantir que a sequência não contenha vírgulas residuais, o que pode ser realizado usandoTRIM(BOTH ',' FROM ...)
.Para remover um modo da
sql_mode
variável, convém usarREPLACE()
juntoTRIM()
para garantir que as vírgulas residuais sejam removidas.Para adicionar um modo à
sql_mode
variável, você gostaria de usá-loCONCAT_WS(',', ...)
, para garantir que uma vírgula seja anexada aos modos atuais eTRIM()
para remover as vírgulas residuais.Reverter para
GLOBAL.sql_mode
Como
SET sql_mode = 'ONLY_FULL_GROUP_BY';
foi executada sem oGLOBAL
modificador, a alteração afetou apenas oSESSION
valor do estado atual , que também pertence@@sql_mode
. Para removê-lo e reverter para o padrão global no valor de reinicialização do servidor , convém usar o valor de@@GLOBAL.sql_mode
. [sic]Para reverter o valor atual do estado da sessão para o valor global atual, você pode usar um dos seguintes:
Mude o
SESSION.sql_mode
valor paraONLY_FULL_GROUP_BY
Reverta o
SESSION.sql_mode
valor para oGLOBAL.sql_mode
valorReinicialização do servidor persistente
sql_mode
Por favor, veja sua versão do MySQL para determinar os modos suportados e padrão .
sql_mode
Valores padrãoComo os valores por versão da documentação do MySQL foram removidos, eu os adicionei aqui para sua referência.
MySQL> = 8.0.11 8.0.5 - 8.0.10 ignorado
MySQL> = 5.7.8, <= 8.0.4
MySQL 5.7.7
MySQL> = 5.7.5, <= 5.7.6
MySQL> = 5.6.6, <= 5.7.4
MySQL <= 5.6.5
fonte
Se você estiver usando o MySQL 8.0.11, precisará remover o 'NO_AUTO_CREATE_USER' do modo sql.
Adicione a seguinte linha no arquivo
/etc/mysql/my.cnf
e no cabeçalho [mysqld]fonte
Estou usando doutrina e adicionei o driverOptions em meu doctrine.local.php:
No phpmyadmin, o usuário precisa do SUPER ativado nos privilégios.
fonte
Para quem está executando um VPS / Server com cPanel / WHM , você pode fazer o seguinte para desativar permanentemente ONLY_FULL_GROUP_BY
Você precisa de acesso root (em um servidor VPS ou dedicado)
Digite WHM como root e execute phpMyAdmin
Clique em Variáveis, procure
sql_mode
, clique em 'Editar' e copie a linha inteira dentro dessa caixa de textopor exemplo, copie isto:
Conecte-se ao seu servidor via SFTP - SSH (root) e faça o download do arquivo
/etc/my.cnf
Abra com um
my.cnf
arquivo de editor de texto no seu PC local e cole nele (na[mysqld]
seção) toda a linha que você copiou na etapa (2), mas removaONLY_FULL_GROUP_BY,
por exemplo, cole isto:
Salve o
my.cnf
arquivo e faça o upload novamente para/etc/
Digite WHM e vá para "WHM> Reiniciar Serviços> SQL Server (MySQL)" e reinicie o serviço
fonte
Estou trabalhando com o mysql e registrado com o usuário root, a solução que funciona para mim é a seguinte:
fonte
Esta é uma solução permanente para o MySql 5.7+ no Ubuntu 14+:
Se você conseguir fazer o login sem erros - você deve estar pronto agora.
fonte
Você pode desativá-lo usando o arquivo de configuração
my.cnf
:Então, no macOS 10.12, está em
usr/local/etc/my.cnf
. Você pode editarsql_mode
aqui:fonte
Aqui está minha solução alterando a configuração do Mysql através do painel phpmyadmin:
Para corrigir "isso é incompatível com sql_mode = only_full_group_by": Abra o phpmyadmin e vá para a Página inicial e selecione o submenu 'Variáveis'. Role para baixo para encontrar o modo sql. Edite o modo sql e remova 'ONLY_FULL_GROUP_BY' Salve-o.
fonte
com o MySQL versão 5.7.28, verifique
SELECT @@sql_mode;
e atualize comfonte