Depende da versão do MySQL, conforme descrito acima. A seguir as documentações do MySQL para a versão 5.5:
"Se um aplicativo armazena valores de uma função como MD5() ou SHA1() que retorna uma string de dígitos hexadecimais, armazenamento e comparações mais eficientes podem ser obtidos convertendo a representação hexadecimal em binário usando UNHEX() e armazenando o resultado em uma coluna BINARY(N). Cada par de dígitos hexadecimais requer um byte em formato binário, portanto, o valor de N depende do comprimento da string hexadecimal. N é 16 para um valor MD5() e 20 para um valor SHA1() ."
Então, em vez de fazer o downgrade da versão do MySQL, você pode fazer o seguinte:
- alterar o tipo da coluna 'senha' de varchar(32) para binary(16)
- adicione a função MySQL 'UNHEX()' à sua consulta MySQL no código ZF, por exemplo:
$adapter = new Zend_Auth_Adapter_DbTable(
$db,
'user',
'login',
'password',
'UNHEX(MD5(CONCAT(?, passwordSalt)))'
);
Funciona bem no meu caso.
Edit --Se o seu sal de senha também estiver armazenado em uma coluna binária (por exemplo, se também for uma string hexadecimal gerada através da função SHA1), o último parâmetro do Zend_Auth_Adapter_DbTable deve ser:'UNHEX(SHA1(CONCAT(?, LOWER( HEX(sal)))))'Então, estamos convertendo o sal de volta para uma string hexadecimal minúscula antes de concatenar com a senha. HEX() retorna seu salt em letras maiúsculas para que você possa omitir a chamada LOWER() se seu salt era originalmente em letras maiúsculas antes de você armazená-lo usando UNHEX().