为什么Perl DBI转义从MySQL检索的值?

Cha*_*der 4 mysql perl escaping dbi dbd

我在MySQL中有一个包含撇号()和省略号(...)的值:

$ /bin/echo "select alias from url_alias where source = 'node/12024'" | \
  mysql --skip-column-names -D cat36ia_d7prod
Run Code Online (Sandbox Code Playgroud)

输出:

forum/technical-discussion/nagging-questions-i’ve-been-too-embarrassed-ask…
Run Code Online (Sandbox Code Playgroud)

当我检索用Perl值DBIDBD::mysql,该值已经改变:

$ perl -MDBI -MDBD::mysql -e
      '$dbh=DBI->connect( "DBI:mysql:database=my_db",nick );
       $v=$dbh->selectrow_array(qq|select alias from url_alias where source = "'node/12024'"|);
       print "$v\n";'
Run Code Online (Sandbox Code Playgroud)

输出:

forum/technical-discussion/nagging-questions-i?ve-been-too-embarrassed-ask?
Run Code Online (Sandbox Code Playgroud)

为什么Perl这样做?我可以覆盖它吗?

ike*_*ami 6

  1. 告诉Perl如何编码输出.

    use open ':std', ':encoding(UTF-8)';
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用,以文本形式从数据库中获取数据

    DBI->connect("DBI:mysql:database=my_db", $user, $pass, {
       mysql_enable_utf8 => 1,
    })
    
    Run Code Online (Sandbox Code Playgroud)