sql >> Databasteknik >  >> RDS >> Mysql

Varför använda bin2hex när du infogar binär data från PHP i MySQL?

Det här låter som en urban legend för mig.

bin2hex() mappar varje byte i ingången till två byte i utgången ('a' -> '61' ), så du bör märka en betydande minnesökning av skriptet som utför frågan - det bör använda minst lika mycket minne mer som bytelängden på de binära data som ska infogas.

Dessutom innebär detta att bin2hex() körs på en lång sträng tar mycket längre än att köra mysql_real_escape string() , som - som förklaras i MySQL:s dokumentation - bara escapes 6 tecken:NULL , \r , \n , \ , , och 'Control-Z'.

Det var för PHP-delen, nu för MySQL:Servern måste göra den omvända operationen för att lagra data korrekt. Att vända någon av funktionerna tar nästan lika lång tid som den ursprungliga operationen - den omvända funktionen för mysql_real_escape_string() måste ersätta kodade värden (\\ ) med okodade (\ ), medan det omvända till bin2hex() skulle behöva ersätta varje byte tuple med en ny byte.

Sedan anropet mysql_real_escape_string() på binär data är säker (enligt MySQL:s och PHP:s dokumentation eller till och med när man bara tänker på att operationen inte gör några andra omvandlingar än de som anges ovan), skulle det vara absolut meningslöst att utföra en så kostsam operation.



  1. Matrisdatatyp, delad sträng,

  2. Hur man konverterar IPv6 från binär för lagring i MySQL

  3. Jag får hela tiden felrelationen [TABELL] existerar inte

  4. REGEX för att välja n:te värde från en lista, vilket tillåter nollvärden