我有一个使用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中,这将按预期工作。
(我从不需要插入表中,只需从中读取,但我认为这并不重要。)
答案 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)