Minha mesa parece
create table try ( name varchar(8), CREATED_BY varchar(40) not null);
e então eu tenho um gatilho para preencher automaticamente o campo CREATED_BY
create trigger autoPopulateAtInsert BEFORE INSERT on try for each row set new.CREATED_BY=user();
Quando faço uma inserção usando
insert into try (name) values ('abc');
a entrada é feita na tabela, mas ainda recebo a mensagem de erro
Field 'CREATED_BY' doesn't have a default value Error no 1364
Existe uma maneira de suprimir esse erro sem tornar o campo anulável E sem remover o triggfer? Caso contrário, meu hibernate verá essas exceções (mesmo que as inserções tenham sido feitas) e então o aplicativo irá travar.
Isso é causado pelo
STRICT_TRANS_TABLES
modo SQL definido noArquivo. Remover essa configuração e reiniciar o MySQL deve resolver o problema.
Consulte https://www.farbeyondcode.com/Solution-for-MariaDB-Field--xxx--doesn-t-have-a-default-value-5-2720.html
Se a edição desse arquivo não corrigir o problema, consulte http://dev.mysql.com/doc/refman/5.6/en/option-files.html para outras localizações possíveis de arquivos de configuração.
fonte
-- verified that the mode was previously set select @@GLOBAL.sql_mode; -- UPDATE MODE SET @@global.sql_mode= 'YOUR_VALUE';
Abra o phpmyadmin e vá para a guia 'Mais' e selecione o submenu 'Variáveis'. Role para baixo para encontrar o modo sql. Edite o modo sql e remova 'STRICT_TRANS_TABLES' Salve-o.
fonte
sudo nano /etc/mysql/my.cnf
adicionar[mysqld] sql_mode = "ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
, salvar e sair, e reiniciar mysqlsudo service mysql restart
sql_mode
para nulo, ou seja,sql_mode = ""
para outros erros semelhantes.No phpmyadmin, execute o seguinte:
No meu caso, recebo o seguinte:
Copie este resultado e remova
STRICT_TRANS_TABLES
. Em seguida, execute o seguinte:fonte
phpmyadmin
nada, use esses comandos namysql
linha de comando.Quando tive esse mesmo problema com o mysql5.6.20 instalado com o Homebrew, resolvi acessando my.cnf
Encontre a linha assim:
Comente a linha acima e reinicie o servidor mysql
O erro desapareceu!
fonte
Execute o console mysql:
, selecione o banco de dados:
e execute (também no console mysql):
Isso desligará o modo estrito e o mysql não reclamará mais.
Para deixar as coisas claras: sua definição de banco de dados diz "este campo deve ter um valor padrão definido" e, seguindo os passos acima, você diz ao MySql "sim, simplesmente ignore". Portanto, se você deseja apenas fazer alguma correção rápida localmente, esta solução está ok. Mas geralmente você deve investigar em sua definição de banco de dados e verificar se o campo realmente precisa do valor padrão e, se for o caso, defina-o. E se o valor padrão não for necessário, este requisito deve ser removido para ter uma situação limpa.
fonte
Como outros disseram, isso é causado pelo
STRICT_TRANS_TABLES
modo SQL.Para verificar se o
STRICT_TRANS_TABLES
modo está ativado:Para desativar o modo estrito:
fonte
Antes de cada ação de inserção, adicionei a linha abaixo e resolvi meu problema,
Não tenho certeza se esta é a melhor solução,
fonte
Seu trabalho e cópia testada para arquivo de configuração: /etc/mysql/my.cnf OR /bin/mysql/my.ini
então reinicie o MySQL
fonte
Modifique sua consulta e adicione "IGNORE" como:
fonte
Para usuários do Windows WampServer :
WAMP> MySQL> my.ini
arquivo de pesquisa para
sql-mode=""
Remova o comentário.
fonte
sql-mode="STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER"sql-mode="STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER"
parasql-mode=""
. Descomentarsql-mode=""
causou o erro.Isso parece ser causado por um bug de longa data (desde 2004) (# 6295) no MySQL , intitulado
Ele foi supostamente corrigido na versão 5.7.1 do MySQL (Changelog, última entrada) em 2013, fazendo o MySQL se comportar “de acordo com o padrão SQL” (ibid).
fonte
NOT NULL
restrição ou adicionar valor padrão à coluna corrigiu o problema. O gatilho funciona conforme o esperado.No Windows Server edite my.ini (por exemplo, arquivos de programa \ mysql \ servidor mysql nn \ my.ini)
Eu não definiria simplesmente sql-mode = "", mas sugiro remover STRICT_TRANS_TABLES da linha, deixar tudo como estava e reiniciar o MySQL a partir do utilitário de serviços. Adicione um comentário para futuros programadores sobre quem você é e o que fez.
fonte
configurei os campos para não nulos e o problema foi resolvido, ele atualiza quando uma informação é comandada para armazenar nele, não mais mostrando a mensagem msqli de que o campo estava vazio porque você não inseriu valor nele, bem, a aplicação desta solução pode funcionar em alguns projetos depende da estrutura do projeto.
fonte
default
atributo da coluna denone
paraNULL
. A menos que haja respostas de alta classificação! meu cPanel estava me dando acesso negado em hospedagem compartilhada quando tentei atualizar a variável sql_mode.Resolvi o problema ao alterar o arquivo my.ini localizado na pasta de dados. para mysql 5.6, o arquivo my.ini foi movido para a pasta de dados em vez da pasta de instalação bin ou mysql.
fonte
Acho que na coluna de nome temos valores nulos neste caso.
fonte