Atualmente você está perdendo metade da soma de verificação ao usar
BINARY(16)
. Quando você armazena uma soma de verificação MD5 em BINARY(16)
você deve armazená-lo como dados binários, não codificado em hexadecimal. Aquilo é:INSERT INTO test (md5_binary) VALUES(UNHEX(md5("one!")));
Você pode usar a função HEX para codificá-lo novamente em hexadecimal se quiser compará-lo com outra soma de verificação:
SELECT HEX(md5_binary) FROM test;
A vantagem de usar BINARY para armazenar a soma de verificação em vez de texto hexadecimal é que metade do armazenamento é necessária.