Для меня это звучит как городская легенда.
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 или даже с учетом того, что операция не выполняет никаких других преобразований, кроме перечисленных выше), она может сделать Совершенно бессмысленно выполнять такую дорогостоящую операцию.