First of all: do not use mysql_escape_string, it is deprecated (for a reason)!
If you have to support a legacy application that connects to the database through the mysql extension (which has been deprecated), use mysql_real_escape_string instead. Otherwise switch immediately to mysqli, where prepared statements and bound parameters provide a more robust mechanism for escaping user input.
That said, the answer can be found by reading the description of mysql_real_escape_string and addslashes:
Difference #1
addslashes does not know anything about MySql connection encodings. If you pass it a string containing bytes representing an encoding other than the encoding used by the MySql connection, it will happily escape all bytes having the values of the characters ', ", \ and \x00. This may not be the same as all the characters ', ", \ and \x00 if you are using an encoding other than 8-bit encodings and UTF-8. The result will be that the string received by MySql will be corrupted.
To trigger this bug, try using iconv to convert your variable to UTF-16 and then escape it with addslashes. See what your database receives.
This is one reason why addslashes should not be used for escaping.
Difference #2
In contrast to addslashes, mysql_real_escape_string also escapes the characters \r, \n, and \x1a. It appears that these characters have to be escaped as well when talking to MySql, otherwise a malformed query may be the result
This is the other reason why addslashes should not be used for escaping.