Take the 2-minute tour ×
Database Administrators Stack Exchange is a question and answer site for database professionals who wish to improve their database skills and learn from others in the community. It's 100% free, no registration required.

I use mysqldump to backup my mysql database. The problem is that the sql file generated by mysqldump doesn't escapes single quotes properly.

Here is an example of the mysqldump generated sql script :

INSERT INTO `someTable` VALUES (1,'This ain\'t escaped correctly');

That single quote escaping in "ain't" doesn't work and it makes the rest of the script being inside that string. Is there a way around this?

share|improve this question

migrated from stackoverflow.com Nov 30 '12 at 4:13

This question came from our site for professional and enthusiast programmers.

1  
that is properly escaped. but remember that escapes are removed at each level of processing. you may need double-or-more escaping, depending on what you're doing to it. –  Marc B Nov 29 '12 at 21:26

1 Answer 1

That output of mysqldump is working as designed, and it is properly escaped, unless you try to restore the dump on a MySQL instance with SQL_MODE=NO_BACKSLASH_ESCAPES set.

There's an outstanding feature request to make mysqldump use a pair of single-quotes to escape literal single-quotes, as per ANSI SQL. See http://bugs.mysql.com/bug.php?id=65941

In the meantime you might be able to convert from backslash-singlequote to pair-of-singlequotes with a command line this:

mysqldump test | sed -e "s/\\\'/''/g" > test-dump.sql

I tried that out briefly by creating a dummy table in my test database and inserting the string "O'Hare" into the table. But that's hardly a comprehensive test -- I take no responsibility for this suggestion working in all cases.

share|improve this answer
    
You're right it's escaping correctly, I thought it wasn't because in notepad++ the rest of the text is gray after that line. The problem is that it didn't generate the "use database" so it gives error no database selected –  user1864537 Nov 29 '12 at 21:42
    
If you name a database when you create the dump, or if you use --all-databases, it should include the "use" commands. –  Bill Karwin Nov 29 '12 at 22:29

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.