Why use bin2hex when inserting binary data from PHP into MySQL?

Posted by Atli on Stack Overflow See other posts from Stack Overflow or by Atli
Published on 2010-04-01T06:07:55Z Indexed on 2010/04/01 6:13 UTC
Read the original article Hit count: 346

Filed under:
|
|
|
|

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:

Private Bytes used by the mysqld process

Does anybody have any explainations or reasources that would clarify this?

Thanks.

© Stack Overflow or respective owner

Related posts about php

Related posts about mysql