Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Por que usar bin2hex ao inserir dados binários do PHP no MySQL?


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.