
O grande problema é que após o insert, todos os valores que tem data, ficam como zeros e no formato yyyy-dd-mm e não dd/mm/yyyy, como foi inserido inicialmente. Como eu posso inserir estes valores na formatação que eu desejo?
Você não pode inserir diretamente dados em qualquer formato que deseje no MySQL para campos datetime e timestamp. O formato que o MySQL utiliza é o padrão ISO: AAAA-MM-DD HH:MM:SS e algumas variantes na mesma ordem.
Entretanto, isto não impede o usuário de converter os formatos no momento da entrada e saída dos dados - lembrando que de qualquer forma, o formato de armazenamento vai se manter igual no DB.
Veja como fazer esta conversão utilizando as próprias funções do MySQL:
dd/mm/aaaa no SELECT:Com a função DATE_FORMAT( data, formato ) você pode converter uma data em uma string formatada.
Exemplo para sua tabela:
SELECT usr_idusuario, DATE_FORMAT( evn_dtevento, "%d/%m/%Y" ) AS data_evento FROM evn_evento; dd/mm/aaaa ao se fazer o INSERT:A função que faz o inverso do exemplo acima é STR_TO_DATE( string, formato ).
Aplicando à sua tabela:
INSERT INTO usr_idusuario SET evn_dtevento = STR_TO_DATE( "31/05/2014", "%m/%d/%Y" ), ... dd/mm/aaaa na cláusula WHERE:SELECT campos FROM tabela WHERE dia = STR_TO_DATE( "31/05/2014", "%m/%d/%Y" ); Ou para um intervalo:
SELECT campos FROM tabela WHERE dia BETWEEN STR_TO_DATE( "01/05/2014", "%m/%d/%Y" ) AND STR_TO_DATE( "31/10/2014", "%m/%d/%Y" ) ; %d Dia (00..31) %e Dia (0..31) %m Mês (00..12) %y Ano (dois dígitos) %Y Ano (quatro dígitos) %% Caractere % %H Horas (00..23) %i Minutos (00..59) %s Segundos (00..59) %T Hora completa ( 24 horas, formato hh:mm:ss) Os formatos estão listados na íntegra no manual do MySQL (en)
WHERE devo usar DATE_FORMAT ou STR_TO_DATE? O Formato padrão é YYYY-MM-DD, para extrair a informação deverá ser tratado na aplicação ou na consulta.
Criando o campo com valor padrão no banco, ou passando now() no INSERT.
Assim será completado com o valor atual.
now() só resolve o problema quando a data é a atual. Se for uma data retroativa ou futura, por exemplo, esta não seria uma opção viável. Talvez seja interessante dar mais contexto e explicar quais são outras alternativas e/ou como lidar com o formato de data sugerido pelo autor da pergunta, caso tenha algo mais a acrescentar ou melhorar além da resposta aceita. ;)
yyyy-mm-ddno select vc utilize alguma função que o banco fornece para formatar conforme necessario.yyyy-mm-dda configuração e você não respeito isso, então, ele colocou zeros, to achando que é Mysql tal comportamente, mas, seria legal colocar a linguagem (se tiver usando) e o nome do banco.