I heard a rumor that when inserting binary data (files and such) into MySQL, you should use the bin2hex()
function and send it as a HEX-coded value, rather than just use mysql_real_escape_string
on the binary string and use that.
// 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}')";
It is supposedly for performance reasons. Something to do with how MySQL handles large strings vs. how it handles HEX-coded values
However, I am having a hard time confirming this. All my tests indicate the exact oposite; that the bin2hex
method is ~85% slower and uses ~24% more memory.
(I am testing this on PHP 5.3, MySQL 5.1, Win7 x64 - Using a farily simple insert loop.)
For instance, this graph shows the private memory usage of the mysqld process while the test code was running:
Does anybody have any explainations or reasources that would clarify this?
Thanks.