使用utf8从perl脚本访问latin1 mysql数据库

时间:2011-04-30 07:47:56

标签: mysql perl character-encoding dbi

我有一个使用utf8 pragma的perl脚本,由于各种原因,它在utf8中执行大部分操作是最实际的。但是,我需要访问一个mysql数据库,其中所有表都在latin1中。我该怎么做?

有点'伪代码':

use utf8;
use DBI;

my $dbh = DBI->connect("DBI:mysql:$database;host=$server", $user, $pw);
my $sth = $dbh->prepare(
  "SELECT recipe.ingredients 
   FROM recipe
   WHERE recipe.id=?");

$sth->execute('rødgrød');

如果我放弃use utf8;并将我的脚本保存在latin1中,这将按预期工作。

(我从不需要插入表中,只需从中读取,但我认为这并不重要。)

3 个答案:

答案 0 :(得分:3)

当连接到mysql时,你应该告诉你的脚本需要并提供UTF-8,所以你需要告诉它连接:

my $dbh = DBI->connect("DBI:mysql:$database;host=$server", $user, $pw, {mysql_enable_utf8 => 1 });

AFAIK最好在连接时告诉它,而不是事后。

答案 1 :(得分:1)

尝试将其设置为以下内容:

$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do(qq{SET NAMES 'utf8';});

答案 2 :(得分:0)