Mysql
 sql >> база данни >  >> RDS >> Mysql

Защо да използвате bin2hex, когато вмъквате двоични данни от PHP в MySQL?

Това ми звучи като градска легенда.

bin2hex() преобразува всеки байт във входа в два байтове в изхода ('a' -> '61' ), така че трябва да забележите значително увеличение на паметта на скрипта, изпълняващ заявката – той трябва да използва поне толкова памет повече, колкото дължината на байта на двоичните данни, които трябва да бъдат вмъкнати.

Освен това, това означава, че се изпълнява bin2hex() на дълъг низ отнема много по-дълго от изпълнението на mysql_real_escape string() , което - както е обяснено в документацията на MySQL - просто екранира 6 знака:NULL , \r , \n , \ , , и 'Control-Z'.

Това беше за PHP частта, сега за MySQL:Сървърът трябва да извърши обратната операция, за да съхрани правилно данните. Обръщането на която и да е от функциите отнема почти толкова време, колкото оригиналната операция - обратната функция на mysql_real_escape_string() трябва да замени екранираните стойности (\\ ) с неекранирани (\ ), докато обратното на bin2hex() ще трябва да замени всеки и всеки байтов кортеж с нов байт.

След извикването на mysql_real_escape_string() на двоични данни е безопасно (според MySQL и документацията на PHP или дори като се има предвид, че операцията не извършва други преобразувания освен изброените по-горе), би имало абсолютно никакъв смисъл да се извършва такава скъпа операция.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на SUM() без групиране на резултатите

  2. MySQL репликация и отказване, базирано на GTID - дълбоко потапяне в грешни транзакции

  3. как автоматично да вмъквам препратки към външни ключове в таблици в mysql или JDBC?

  4. SQL грешка (1215):Не може да се добави ограничение за външен ключ

  5. CONV() – Преобразуване на числа между различни бази в MySQL