繁体   English   中英

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

[英]Accessing latin1 mysql database from perl script using utf8

我有一个使用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 中,这可以按预期工作。

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

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

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

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

尝试将其设置为这样的:

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

请注意,如果您的 Perl 源文件以 UTF-8 编码,则utf8 pragma 仅适用。 另一方面,如果它以 Latin1 编码,则不应使用utf8 pragma。 那么rødgrød是由七个(Latin1)还是九个(UTF-8)八位字节组成?

与 MySQL 的交互与utf8设置无关,soulSurfer2010 已针对该问题给出了正确答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM