No hay diferencia.
Sin embargo, hay una advertencia si está almacenando una cadena.
Si solo desea almacenar una matriz de bytes u otros datos binarios, como una secuencia o un archivo, use el tipo binario, ya que para eso están destinados.
Cita del manual de MySQL :
Entonces, técnicamente no hay diferencia.
Sin embargo, al almacenar una cadena, debe convertirse de una cadena a valores de byte utilizando un conjunto de caracteres. La decisión es hacer esto usted mismo antes que el servidor MySQL o dejar que MySQL lo haga por usted. MySQL funcionará emitiendo una cadena a BINARY
utilizando los juegos de caracteres BIN.
Si desea almacenar la codificación en otro formato, digamos que tiene un requisito comercial que dice que debe usar 4 bytes por carácter (MySQL no hace esto de manera predeterminada), entonces podría usar CHARACTER SET BINARY
a una columna de texto y realice la codificación del juego de caracteres usted mismo.
También vale la pena leer El BINARY
y VARBINARY
Tipos
del manual de MySQL ya que detalla información importante como el relleno.
Resumen: No hay diferencia técnica ya que uno es sinónimo del otro. En mi opinión, tiene sentido lógico almacenar cadenas binarias en tipos de datos que normalmente contendrían una cadena utilizando CHARACTER SET BINARY
y para almacenar matrices/flujos de bytes, etc. en BINARY
campos que no se pueden representar transformando los datos a través de un juego de caracteres.