Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Po co używać bin2hex podczas wstawiania danych binarnych z PHP do MySQL?

Dla mnie brzmi to jak miejska legenda.

bin2hex() mapuje każdy bajt w danych wejściowych na dwa bajty na wyjściu ('a' -> '61' ), więc powinieneś zauważyć znaczny wzrost pamięci skryptu wykonującego zapytanie - powinien on używać co najmniej tyle pamięci, ile wynosi długość wstawionych danych binarnych.

Co więcej, oznacza to, że uruchomienie bin2hex() na długim łańcuchu zajmuje dużo dłużej niż uruchomienie mysql_real_escape string() , co - jak wyjaśniono w dokumentacji MySQL - po prostu ucieka 6 znaków:NULL , \r , \n , \ , , i 'Control-Z'.

To było dla części PHP, teraz dla MySQL:serwer musi wykonać odwrotną operację, aby poprawnie przechowywać dane. Odwrócenie jednej z funkcji zajmuje prawie tyle samo czasu, co pierwotna operacja — odwrócenie funkcji mysql_real_escape_string() musi zastąpić wartości ze znakami ucieczki (\\ ) z nieuniknionymi (\ ), podczas gdy odwrotność bin2hex() musiałby zastąpić każdą krotkę bajtową z nowym bajtem.

Od wywołania mysql_real_escape_string() na danych binarnych jest bezpieczny (zgodnie z MySQL i dokumentacją PHP lub nawet biorąc pod uwagę, że operacja nie wykonuje żadnych innych konwersji niż te wymienione powyżej), nie ma sensu wykonywać tak kosztownej operacji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmiana silnika tabel w MySQL

  2. MySQL ON DUPLICATE KEY UPDATE dla wielu wierszy wstawia się w jednym zapytaniu

  3. Jak ustawić zmienną środowiskową Path za pomocą C#

  4. Jak policzyć wszystkie wiersze przy użyciu SELECT z LIMIT w zapytaniu MySQL?

  5. mysql jeśli wiersz nie istnieje, pobierz domyślną wartość