Das ist ja auch der Grund, warum mysql_escape_string durch mysql_real_escape_string ersetzt (im Sinne von Empfehlung, das zu verwenden) wurde:
Es hat wild drauf los escaped, weil ihm die Zeichenkodierung der Datenbank herzlich egal war. Das neuere will die benutzte DB-Verbindung wissen (mysqli_escape_string ebenfalls), aber da haben wir den Salat, den du schildertest.
Richtige Anwendung beinhaltet die Beachtung des Zeichensatzes.