在Perl和MySQL UTF8 enconding(utf8 enconding in Perl

2019-08-02 04:13发布

我的数据库(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!

谢谢。

Answer 1:

如果每个A / A / O在输出由两个字节被表示,则它也可以,就可以作双重编码的字符。 (鉴于该问题已经显示了做$dbh->{'mysql_enable_utf8'} = 1;我怀疑这是最有可能的情况下),另一种可能性,因为你在网页上显示这一点,是该页面可以不被指定的字符集是在其UTF-8 <head>并且浏览器不正确地可以在字符猜测编码它的用途。

看看你的web应用框架,模板系统等的密切关注,以确保值仅被当他们从数据库中检索,当他们到达用户的浏览器之间的编码一次。 许多框架/模板引擎(如舞蹈家的结合,TT,我通常使用)会自动处理输出的编码,如果你正确地配置它们,这意味着数据将是双重编码,如果是明确之前被输出的编码。



Answer 2:

您需要设置mysql_enable_utf8上的连接:

 my($dbh) = DBI->connect(
     'dbi:mysql:test',
     'user',
     'password',
     {
         mysql_enable_utf8 => 1,
     }      
);


Answer 3:

您需要字符集在连接设置为UTF-8!

charset = utf8


Answer 4:

这里是完满成功规格:

http://search.cpan.org/~capttofu/DBD-mysql-4.038/lib/DBD/mysql.pm#mysql_enable_utf8

此外,导通这个标志告诉MySQL传入的数据应该以UTF-8来处理。 如果作为调用的一部分来连接这才会生效()。 如果你把国旗上的连接后,您将需要发出命令SET NAMES UTF8得到同样的效果。



文章来源: utf8 enconding in Perl and MySql
标签: mysql perl utf-8