How to include a semicolon (";") in a MySQL pager command I've just discovered the pager command in the MySQL command-line client, and I'm having a tonne of fun. This blog post is great:

http://www.mysqlperformanceblog.com/2008/11/21/how-to-calculate-a-good-innodb-log-file-size/

Unfortunately as a Perl programmer I find myself wanting to do more and more complicated pagers, and I've hit into a problem: I don't seem to be able to use a semicolon character in my pager command.

Simple:

mysql&gt; pager md5sum
PAGER set to 'md5sum'
mysql&gt; select id from listings limit 5;
cfbe10c0a46ea57f6fa199bc9e05ed3a  -


More complicated but still fine:

mysql&gt; pager perl -nle 'print "    $_"'
PAGER set to 'perl -nle 'print "    $_"''
mysql&gt; select id from listings limit 5;
    +---------+
    | id      |
    +---------+
    | 2003921 |
    | 7164746 |
    | 7166576 |
    | 7166605 |
    | 7166853 |
    +---------+


(That one is useful for dealing with Markdown!)

But unfortunately if I add a semicolon on the end of my statement it says I have a syntax error:

mysql&gt; pager perl -nle 'print "    $_";'
    -&gt; \c

mysql&gt; pager perl -nle 'print "    $_";';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'pager perl -nle 'print "    $_";'' at line 1


I've tried escaping the semicolon in the Perl command with a backslash or two (in case the backslash itself needed escaping) but nothing seems to work.

Is it possible to include a semicolon in a pager command?
Try to set delimiter to something else than ;

     mysql&gt; DELIMITER endl
     mysql&gt;


Then you can set pager with the semicolon:

     mysql&gt; pager pager perl -nle 'print "    $_";'endl
     PAGER set to 'pager perl -nle 'print "    $_";''


Then you can come back to ;

     mysql&gt; DELIMITER ;