Não há diferença.
No entanto, há uma ressalva se você estiver armazenando uma string.
Se você deseja armazenar apenas uma matriz de bytes ou outros dados binários, como um fluxo ou arquivo, use o tipo binário, pois é para isso que eles se destinam.
Citação do manual MySQL :
Então, tecnicamente não há diferença.
No entanto, ao armazenar uma string, ela deve ser convertida de uma string para valores de byte usando um conjunto de caracteres. A decisão é fazer isso você mesmo antes do servidor MySQL ou deixar que o MySQL faça por você. O MySQL funcionará lançando uma string para
BINARY
usando os conjuntos de caracteres BIN. Se você quiser armazenar a codificação em outro formato, digamos que você tenha um requisito de negócios que diga que você deve usar 4 bytes por caractere (o MySQL não faz isso por padrão), então você pode usar o
CHARACTER SET BINARY para uma coluna de texto e execute você mesmo a codificação do conjunto de caracteres.
Também vale a pena ler O BINARY
e VARBINARY
Tipos
do manual do MySQL, pois detalha informações importantes, como preenchimento.
Resumo: Não há diferença técnica, pois um é sinônimo do outro. Na minha opinião, faz sentido lógico armazenar strings binárias em tipos de dados que normalmente conteriam uma string usando o CHARACTER SET BINARY
e para armazenar matrizes de bytes / fluxos etc em BINARY
campos que não podem ser representados pela transformação dos dados por meio de um conjunto de caracteres.