Я слышал слух, что при вставке двоичных данных (файлов и тому подобного) в MySQL вы должны использовать bin2hex()
и отправлять ее в виде HEX-кодированного значения, а не просто использовать mysql_real_escape_string
в двоичной строке и использовать ее.
// That you should do
$hex = bin2hex($raw_bin);
$sql = "INSERT INTO 'table'('file') VALUES (X'{$hex}')";
// Rather than
$bin = mysql_real_escape_string($raw_bin);
$sql = "INSERT INTO 'table'('file') VALUES ('{$bin}')";
Это предположительно по причинам производительности. Что-то связанное с тем, как MySQL обрабатывает большие строки, и как он обрабатывает HEX-кодированные значения
Однако мне трудно это подтвердить. Все мои тесты показывают точный опозит; что метод bin2hex
работает на ~ 85% медленнее и использует на ~ 24% больше памяти.
(Я тестирую это на PHP 5.3, MySQL 5.1, Win7 x64 - используя очень простой цикл вставки.)
Например, этот график показывает использование частной памяти процессом mysqld во время выполнения тестового кода:
(источник: advefir.com)
У кого-нибудь есть какие-либо объяснения или источники, которые бы прояснили это?
Благодарю.