Clipper On Line • Ver Tópico - Resultado diferente Hb_Md5 x Md5 (Mysql)

Resultado diferente Hb_Md5 x Md5 (Mysql)

Discussão sobre SQL

Moderador: Moderadores

 

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagempor janio » 09 Mar 2017 22:09

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 de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagempor fladimir » 09 Mar 2017 22:23

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...
 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 de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagempor janio » 09 Mar 2017 22:46

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 de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagempor janio » 09 Mar 2017 22:48

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 de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagempor janio » 09 Mar 2017 23:10

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 de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagempor janio » 09 Mar 2017 23:34

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 de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagempor fladimir » 10 Mar 2017 07:50

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 de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagempor JoséQuintas » 10 Mar 2017 12:52

É 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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagempor janio » 10 Mar 2017 20:52

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.

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


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 de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagempor fladimir » 10 Mar 2017 21:10

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 de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagempor janio » 10 Mar 2017 21:31

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
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
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
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Resultado diferente Hb_Md5 x Md5 (Mysql)

Mensagempor alxsts » 13 Mar 2017 08:44

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)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 9 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro