Provavelmente é por causa do seu tipo de campo de senha. Seu campo de senha é
VARCHAR
? Quanto tempo é? Parece-me que SHA
está gerando uma string mais longa do que o permitido pelo campo, então ela é cortada quando é armazenada e corresponde quando você a gera novamente para verificar. documentação do MySQL diz que você precisa de 40 caracteres para armazenar a saída de
SHA
.