Mysql com formato de data AAAA/DD/mm - RESOLVIDO

Nel, obrigado por se preocupar em me ajudar, mas sou iniciante, não entendi direito oq quis me ensinar, vc poderia me dar um exemplo?

abraços

vou dar um exemplo:

tenho uma tabela chamada data
com coluna id - nome - data
e os seguintes dados:

1d = 1 nome = leandro data = 1981-12-29

se eu fizer um select * from data where data = ‘1981-12-29’ irá funcionar correto???

porem quando migrei pro novo sistema operacional a data cadastrada no banco ficou:
1d = 1 nome = leandro data = 1981-29-12 este select então iria retornar null certo? queria corrigir isto no banco.

não vai retornar null pelo simples fato de que a query não seria compilada. Não conseguiria gerar uma data ‘12 do mês 29’ porque não existe mês 29. O máximo que o java faria quando você usa o setDate para definir uma data em uma query, seria

  WHERE data = STR_TO_DATE('1981-12-29 ','%Y-%m-%d');

Isso aqui dificilmente dará algum erro como você diz.

select c.,m.,p.* from contato c inner join mensalidade m inner join pgto p where c.matricula = ? and p.dataPagamento= STR_TO_DATE( ? ,’%Y-%m-%d’) and c.idcontato = m.idcontato and m.idmensalidade = p.idmensalidade and m.pago = 1 group by p.idmensalidade,p.idpgto order by c.matricula,m.ano,m.mesref ASC

sera que isso funcionaria? ainda nao estou em casa para testar…

evefuji
o select ta corretissimo, informa a data no formato 1981-12-29

poreeeeem no banco esta aparecendo 1981-29-12 AAAA-mm-dd por isso retorna null, nao lista nada, pq meu select procura por uma data e no banco ta outra

mouzer, isso só funcionaria se você estivesse enviando o parâmetro como String, não como java.util.Date. Quando você envia java.util.Date ele já “define” o formato. O driver jdbc do mysql já faz esse tipo de tratamento.

Segundo os padrões do MySQL, o formato [color=blue]YYYY-MM-DD[/color] é padrão e não pode ser alterado.

Veja:[quote]The format of a DATE value is ‘YYYY-MM-DD’. According to standard SQL, no other format is permitted. You should use this format in UPDATE expressions and in the WHERE clause of SELECT statements. For example:[/quote]FONTE: http://dev.mysql.com/doc/refman/5.6/en/using-date.html

Abraço!

Assim que chegar em casa, eu ligo o servidor, tiro um print e posto para voces olharem como está no banco.

fiz um pagamento hoje e esta: 2012-03-01

O Meu MYSql quando pega do BD também pega no formato YYYY-DD-MM. Usa um SimpleDateFormat

Como você está acessando essa informação do banco?

Acredito que seja um conflito entre seu SO e seu servidor SQL.

Veja se as configurações de ambos estão batendo legal.

como assim danilovicente??
vc viu ai minha query sql?
daria um exemplo?

[quote=mouzer]como assim danilovicente??
vc viu ai minha query sql?
daria um exemplo?[/quote]

Estou saindo do trabalho, chegando em casa eu entro e te mando um exemplo.

@Vingdel, o formato é padrão SQL ANSI, o MySQL segue esse padrão mas não estritamente. Muitas das funções do MySQL não seguem o SQL ANSI, o maior exemplo é a falta do full join. É muito comum mudar de acordo com o locale. Mas o mais provável nesse caso é que o mouzer esteja usando o PHPMyAdmin e ele esteja mostrando o formato que o PHPMyAdmin está configurado.

@Mouzer: tenta fazer a consulta direto no seu cliente SQL. Depois mostra se conseguiu o resultado e a gente te sugere como fazer isso no java.

Então pode ser isso mesmo, configuração da aplicação que está usando para visualizar os dados do banco, no caso dele é o MySQL Query Browser.

Isso se confirma se fizer uma consulta pelo próprio MySQL.

Vamos ver o que ele e diz.

Até mais!

Amigos… Se eu fizer uma consulta no formato correto ex: select * from data where data = ‘2012-01-03’ ira retornar zero registro pq no banco de dados inexplicavelmente todos os registros estão aparecendo assim: 2012-03-01 já fiz este teste

Sim mouzer, mas vc ta fazendo a consulta pelo MySQL Query Browser ou pelo console?

eu fiz pelo console e pelo query browser…
ja to ate desistindo, nao acho nada parecido na internet

mouzer, faz o seguinte, antes de executar a consulta, faz um System.out.println(preparedStatement.toString()); E coloca aqui o que ele imprime no console certo?

o driver jdbc não depende do formato da data na base de dados.

Podes, por favor, postar o modo como persiste a data no banco de dados?
O método que faz a persistência das informações na tabela que está realizando a consulta, por favor.

Poste-o completo. Uma observação, o formato da data salva no banco independe do S.O que utiliza, se executa de uma forma, ela sempre será salva daquela forma.
O seu banco não iria alterar o formato dela, a não ser que tu altere isso nas configurações do seu banco de forma implícita, por padrão, é exatamente a mesma.

No aguardo.

Mouzer
Desculpe não consegui entrar ontem mas segue a lógica que eu usei nesse código. É bem simples. Qualquer dúvida me chama aê.

[code]import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;

public class Teste {

public Teste() {
    String data = "2012-03-01";
    SimpleDateFormat formata = new SimpleDateFormat("yyyy-dd-MM");
    SimpleDateFormat converte = new SimpleDateFormat("dd/MM/yyyy");
        Date date = new GregorianCalendar().getTime();
        System.out.println("Formatada: "+date+" Convertida: "+converte.format(date));
        try{
        date = formata.parse(data);
        System.out.println("Entrada: "+data+" Formatada: "+date+" Convertida: "+converte.format(date));
        }catch(ParseException e){
            e.printStackTrace();
        }

}

public static void main(String[] args) {
    new Teste();
}

[/code]