sql >> Database teknologi >  >> RDS >> Mysql

Hvorfor bruge bin2hex, når du indsætter binære data fra PHP i MySQL?

Det lyder som en urban legende for mig.

bin2hex() kortlægger hver byte i input til to bytes i outputtet ('a' -> '61' ), så du bør bemærke en betydelig hukommelsesforøgelse af scriptet, der udfører forespørgslen - det bør bruge mindst lige så meget hukommelse mere som bytelængden af ​​de binære data, der skal indsættes.

Desuden indebærer dette, at kørsel af bin2hex() på en lang streng tager meget længere end at køre mysql_real_escape string() , hvilket - som forklaret i MySQL's dokumentation - undlader bare 6 tegn:NULL , \r , \n , \ , , og 'Control-Z'.

Det var for PHP-delen, nu for MySQL:Serveren skal udføre den omvendte handling for at gemme dataene korrekt. At vende en af ​​funktionerne tager næsten lige så lang tid som den oprindelige operation - den omvendte funktion af mysql_real_escape_string() skal erstatte escapede værdier (\\ ) med unescaped (\ ), mens det omvendte af bin2hex() ville være nødt til at erstatte hver og hver byte tuple med en ny byte.

Siden kaldet mysql_real_escape_string() på binære data er sikkert (ifølge MySQL's og PHP's dokumentation eller selv når man bare tænker på, at operationen ikke udfører andre konverteringer end dem, der er anført ovenfor), ville det absolut ikke give mening at udføre en så dyr operation.



  1. ImportError:Intet modul med navnet 'MySQL'

  2. Hvordan forvandler man 2 forespørgsler med fælles kolonner (A, B) og (A, C) til kun én (A, B, C)?

  3. Rækkeniveaulåsning i Mysql

  4. Indsætter i Oracle og henter det genererede sekvens-id