sql >> Databáze >  >> RDS >> Mysql

Proč používat bin2hex při vkládání binárních dat z PHP do MySQL?

To mi zní jako městská legenda.

bin2hex() mapuje každý bajt na vstupu na dva bajtů na výstupu ('a' -> '61' ), takže byste si měli všimnout výrazného nárůstu paměti skriptu provádějícího dotaz – měl by využívat alespoň o tolik paměti více, jako je délka bajtů vkládaných binárních dat.

Dále to znamená, že spuštění bin2hex() na dlouhém řetězci zabere hodně delší než spuštění mysql_real_escape string() , což – jak je vysvětleno v dokumentaci MySQL - pouze escapuje 6 znaků:NULL , \r , \n , \ , , a 'Control-Z'.

To bylo pro část PHP, nyní pro MySQL:Server musí provést opačnou operaci, aby data správně uložila. Vrácení jedné z funkcí trvá téměř stejně dlouho jako původní operace – zpětná funkce mysql_real_escape_string() potřebuje nahradit uniklé hodnoty (\\ ) s neescapovanými jedničkami (\ ), zatímco opak bin2hex() bude muset nahradit každý jeden byte n-tice s novým byte.

Od volání mysql_real_escape_string() na binárních datech jsou bezpečná (podle dokumentace MySQL a dokumentace PHP nebo i když vezmeme v úvahu, že operace neprovádí žádné jiné konverze než ty, které jsou uvedeny výše), nemělo by absolutně žádný smysl provádět tak nákladnou operaci.



  1. Prahové hodnoty optimalizace – seskupování a agregace dat, část 5

  2. Správa zásob s opcemi na akcie

  3. Spojení tabulek InnoDB s tabulkami MyISAM

  4. Nekonečná smyčka CTE s OPTION (max. rekurze 0)