Estou tentando definir sql_mode no mysql, mas gera um erro.
Comando:
set global sql_mode='NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLE','NO_AUTO_CREATE_USER','NO_ENGINE_SUBSTITUTION'
Esta não é a maneira correta de definir vários modos? Quais são as vantagens de definir modos de sessão e globais? o que é preferido? Tenho diferentes usuários tentando atualizar o banco de dados com diferentes valores UNC e, em vez disso, definindo o modo de sessão como 'NO_BACKSLASH_ESCAPES', achei que faria sentido definir um modo global para isso. Isso faz sentido?
Por favor deixe-me saber.
Obrigado.
Respostas:
BTW, se você definir globais no MySQL:
SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION'; SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';
Isso não o definirá PERMANENTEMENTE e será revertido após cada reinicialização.
Portanto, você deve definir isso em seu arquivo de configuração (por exemplo,
/etc/mysql/my.cnf
na seção [mysqld]), para que as alterações permaneçam em vigor após a reinicialização do MySQL:Arquivo de configuração: /etc/mysql/my.cnf
ATUALIZAÇÃO: versões mais recentes do Mysql (por exemplo, 5.7.8 ou superior) podem exigir uma sintaxe ligeiramente diferente:
Certifique-se de que haja um traço entre
sql-mode
não sublinhado e que os modos estejam entre aspas duplas.Sempre consulte os documentos do MySQL de sua versão para ver as opções do modo sql .
fonte
5.7.20
, e no caso demysql.ini
, usar um sublinhado e esquecer as aspas funciona muito bem, como:sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
Eu resolvi isso.
o modo correto é:
set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
fonte
Configurando o modo sql permanentemente usando o arquivo de configuração mysql.
No meu caso, preciso alterar o arquivo
/etc/mysql/mysql.conf.d/mysqld.cnf
conformemysql.conf.d
incluído em/etc/mysql/my.cnf
. eu mudo isso em [mysqld]apenas removido
ONLY_FULL_GROUP_BY
modo sql porque estava causando o problema.Eu estou usando
ubuntu 16.04
,php 7
e mysql --version me dê issomysql Ver 14.14 Distrib 5.7.13, for Linux (x86_64) using EditLine wrapper
Após esta mudança, execute os comandos abaixo
sudo service mysql stop sudo service mysql start
Agora verifique os modos sql por esta consulta
SELECT @@sql_mode
e você deve obter os modos que acabou de definir.fonte
Copiar para arquivo de configuração:
/etc/mysql/my.cnf OR /bin/mysql/my.ini
MySQL
reiniciar.Ou você também pode fazer
MySQL
reiniciar.fonte
sql_mode
vez desql-mode
.Para quem está pesquisando esse erro no Google para MySQL 8.
O MySQL 8.0.11 remove o 'NO_AUTO_CREATE_USER' do modo sql.
Retirado daqui
Então, você
sql_mode
pode ser assim:Ou se estiver usando o Docker, você pode adicionar o próximo comando a docker-compose.yml
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}
fonte
Para mudança temporária, use o seguinte comando
set global sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Para mudanças permanentes: vá para o arquivo de configuração /etc/my.cnf ou /etc/mysql/mysql.conf.d/mysqld.cnf e adicione as seguintes linhas e reinicie o serviço mysql
fonte
Acesse o banco de dados como usuário administrador (root, talvez).
Verifique o SQL_mode atual
mysql> SELECT @@sql_mode;
Para definir um novo sql_mode, saia do banco de dados, crie um arquivo
com o seu conteúdo sql_mode
Reinicie o Mysql
mysql> sudo service mysql stop mysql> sudo service mysql start
Criamos um arquivo na pasta /etc/mysql/conf.d/ porque no arquivo de configuração principal /etc/mysql/my.cnf o comando é escrito para incluir todos os arquivos de configuração da pasta / etc / mysql / conf. d /
fonte
Verifique a documentação do sql_mode
Método 1:
Verifique o valor padrão de sql_mode:
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";
Método 2:
Acesse o phpmyadmin para editar o seu
sql_mode
Reinicie o servidor depois de executar as coisas acima
fonte
No meu caso, tenho que alterar o arquivo,
/etc/mysql/mysql.conf.d/mysqld.cnf
altere isso em [mysqld
]Cole esta linha na
mysqld
parte [ ]fonte
Eu só tive um problema semelhante onde o MySQL (5.6.45) não aceitava
sql_mode
de qualquer arquivo de configuração.A solução foi adicionar
init_file = /etc/mysql/mysql-init.sql
ao arquivo de configuração e executarSET GLOBAL sql_mode = '';
nele.fonte
No meu caso mysql e ubuntu 18.04
Eu o defino permanentemente usando este comando
Acrescente a linha após a configuração. Veja o exemplo destacado na imagem abaixo.
Consulte a documentação e a referência dos modos sql disponíveis
Espero que isto ajude :-)
fonte
Se alguém quiser configurá-lo apenas para a sessão atual, use o seguinte comando
set session sql_mode="NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
fonte
fonte