Isso soa como uma lenda urbana para mim.
bin2hex() mapeia cada byte na entrada para dois bytes na saída ('a' -> '61' ), então você deve notar um aumento significativo de memória do script que executa a consulta - ele deve usar pelo menos tanta memória quanto o comprimento do byte dos dados binários a serem inseridos. Além disso, isso implica que executar
bin2hex() em uma longa string leva muito mais do que executar mysql_real_escape string() , que - conforme explicado na documentação do MySQL - apenas escapa 6 caracteres:NULL , \r , \n , \ , , e 'Control-Z'. Isso foi para a parte do PHP, agora para o MySQL:O servidor precisa fazer a operação inversa para armazenar os dados corretamente. Reverter qualquer uma das funções leva quase tanto tempo quanto a operação original - a função reversa de
mysql_real_escape_string() precisa substituir valores de escape (\\ ) com os sem escape (\ ), enquanto o inverso de bin2hex() precisaria substituir cada tupla de byte com um novo byte. Desde que chamou
mysql_real_escape_string() em dados binários é seguro (de acordo com MySQL e documentação do PHP ou mesmo considerando apenas que a operação não faz outras conversões além das listadas acima), não faria absolutamente nenhum sentido realizar uma operação tão custosa.