Resultado diferente Hb_Md5 x Md5 (Mysql)

Forum sobre SQL.

Moderador: Moderadores

Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagem por janio »

Pq a diferença? Ou como fazer pra serem iguais?

Harbour

Select Produto
DbSetOrder(1)
DbGoTop()
CodMd5 = Hb_Md5( Str(CODIGO) + CODBAR + DESCRI )

Resultado = 3e3d66713b697f0c1dafbe4f87017eeb

MySql

SELECT MD5(CODIGO + CODBAR + DESCRI) from a03prd where codigo=1

Resultado = 732413127680b53a739bf0c561d63afa
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagem por fladimir »

Sem analisar muito a fundo, pra retornar o mesmo código MD5 os conteúdios passados para função tem q ser idênticos, ou seja... vamos analisar um trecho do código...
Harbour
//----------------> Aki subentendemos q por estar setado dbSetOrder(1) e depois dbGoTop() seja o índice q em ordem de código e estamos no código 1 tb... // agora vc conferiu se na tabela é este o primeiro registro deste índice?

CodMd5 = Hb_Md5( Str(CODIGO) ) //--> Outro detalhe, q considero onde possívelmente esteja a diferença, observe q vc transformou o campo numérico para Caracter e isso faz com q sejam adicionados espaços, q serão considerados na função do MD5

MySql

SELECT MD5(CODIGO) from a03prd where codigo=1 //--> Aki vc esta definindo q as informações são referentes ao código 1... ok, agora qual o tipo do campo Codigo aki? Caracter?
Então voltando ao início, vc tem q ter certeza q o contéudo passado para as funções q geram o MD5 são exatamente identicos...

Código: Selecionar todos

 MD5 de "      1"  vai gerar um MD5 diferente de "1"
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagem por janio »

Fladimir,

A diferença parece estar mesmo na transformação de campo NUMERICO em CARACTERE.

hb_md5( AllTrim(Str(CODIGO)) )

deu o mesmo resultado de

SELECT MD5(CODIGO)
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagem por janio »

O campo codigo eh NUMERO sem casas decimais. Funcionou!

Agora estou vendo como fazer para campos que tenham casas decimais. A principio nao funcionou apenas tirando todos os espaços com AllTrim

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagem por janio »

O negocio tá meio maluco!

SELECT MD5( '1' )

e

SELECT MD5( '1' + 'Janio' )

tem o mesmo resultado = c4ca4238a0b923820dcc509a6f75849b
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagem por janio »

Tem que usar a função CONCAT para juntar os valores

SELECT MD5( CONCAT('1' , 'Janio') )

Avançando...

Campo numerico com CASAS DECIMAIS ainda nao estou conseguindo o mesmo resultado harbour x MySql
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagem por fladimir »

Tem uma função no MySQL q converte tipos, da uma pesquisada, acho q é CAST ou algo assim
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagem por JoséQuintas »

É sempre bom definir a quantidade de casas no StrZero() ou Str() pra não ter surpresas.

Acho que o MySql tem uma funcão Format(), para formatar números, dê uma pesquisada nisso também.

Nota sobre a soma do MySQL: ele pode retirar espaços em branco extras na soma, por isso o resultado não é o esperado. CONCAT() apenas "concatena" as strings, sem alterar o conteúdo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagem por janio »

Ola todos,

Consegui no MySql o mesmo resultado do Harbour.

No harbour a gente "junta" valores com "+". No MySql é o CONCAT que faz isso. Essa é a primeira observação.

O outro detalhe é que tive que usar a função Trim no MySql. Campos caracteres vazios o MySql entende como " ", ou seja, com 1 espaço.

Código: Selecionar todos

MD5( Concat( '&SenhaMD5', Trim(PCTALQ), codigo, Trim(codbar), Trim(descri), sldstk, stkdia, Trim(codalq), prcmer)

Código: Selecionar todos

hb_md5( SenhaMD5 + AllTrim(pctalq) + AllTrim(str(codigo)) + AllTrim(CodBar) + AllTrim(Descri) + AllTrim(str(SldStk)) + AllTrim(str(StkDia)) + AllTrim(CodAlq) + AllTrim(str(PrcMer)) )
Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagem por fladimir »

Parabéns!!!

Obrigado por compartilhar.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagem por janio »

Isso aí Fladimir!

Uso RDD Mediator que se propoe a fazer o mesmo que o SQLRdd do xHarbour. Mediator funciona que é uma maravilha e mim 'salvou' do dbf com pouquíssimas mudanças no código fonte.

No entanto, apesar de ser uma mão na roda esse tipo de rdd, em algumas situações vamos vendo que devemos abandonar o codigo xbase e usar direto os comandos sql.

Exemplo:

Codigo xBase em MySql: 30 mil produtos, 7 minutos para processamento

Código: Selecionar todos

Select Produto
DbSetOrder(1)
DbGoTop()
Do While !Eof()
   Trava()
   replace STKDIA with SLDSTK
   replace MD5REG with RegMd5Produtos()

   DbSkip()
Enddo

Codigo MySql: 30 mil produtos, 7 segundos

Código: Selecionar todos

cQuery := [UPDATE a03prd SET STKDIA=SLDSTK, MD5REG=MD5( Concat( '&SenhaMD5', Trim(PCTALQ), codigo, Trim(codbar), Trim(descri), sldstk, stkdia, Trim(codalq), prcmer) ) ]

MedExecSql(cQuery)
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagem por alxsts »

Olá!

Para evitar problemas, não se esqueça de tratar os campos que retornam do banco de dados como valor NULL. Use a função IFNULL() do MySQL em seus SELECTs.
[]´s
Alexandre Santos (AlxSts)
Responder