我的数据库(MySQL的)有utf8_general整理。 我从数据库中访问数据并显示一个网页(在Perl开发),它显示瑞典字符(A,A,O)有不同的字符。 我在Mysql数据库检查,有我可以看到A,A,在IT运字符的数据。 看来,有一个编码的问题,同时访问数据。 当连接到数据库,使用下面的代码
my($dbh) = DBI->connect($config{'dbDriver'},$config{'dbUser'},$config{'dbPass'}) or die "Kunde inte ansluta till $config{'dataSource'}: " . $DBI::errstr;
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('set names utf8');
任何帮助appreaciated!
谢谢。
如果每个A / A / O在输出由两个字节被表示,则它也可以,就可以作双重编码的字符。 (鉴于该问题已经显示了做$dbh->{'mysql_enable_utf8'} = 1;
我怀疑这是最有可能的情况下),另一种可能性,因为你在网页上显示这一点,是该页面可以不被指定的字符集是在其UTF-8 <head>
并且浏览器不正确地可以在字符猜测编码它的用途。
看看你的web应用框架,模板系统等的密切关注,以确保值仅被当他们从数据库中检索,当他们到达用户的浏览器之间的编码一次。 许多框架/模板引擎(如舞蹈家的结合,TT,我通常使用)会自动处理输出的编码,如果你正确地配置它们,这意味着数据将是双重编码,如果是明确之前被输出的编码。
您需要设置mysql_enable_utf8
上的连接:
my($dbh) = DBI->connect(
'dbi:mysql:test',
'user',
'password',
{
mysql_enable_utf8 => 1,
}
);
这里是完满成功规格:
http://search.cpan.org/~capttofu/DBD-mysql-4.038/lib/DBD/mysql.pm#mysql_enable_utf8
此外,导通这个标志告诉MySQL传入的数据应该以UTF-8来处理。 如果作为调用的一部分来连接这才会生效()。 如果你把国旗上的连接后,您将需要发出命令SET NAMES UTF8得到同样的效果。