我有mysql数据库,每个表都有COLLATE ='utf8_general_ci'。
我连接到dbi my $db = DBI->connect($cstring, $user, $password)
且没有
$db->{mysql_enable_utf8} = 1
$db->do(qq{SET NAMES 'utf8';} );
然后选择表并使用Text :: CSV将其复制到csv文件到myFile,其中myFile的打开方式如下所示:
binmode(Myfile, ":utf8")
我在不同的表上重复此过程的问题,如上所述打开的不同文件,但在某些文件上,我得到双重编码,只有当我删除这些特定文件的binmode问题解决,而其他文件很好并编码utf8,如果我删除他们的binmode我在utf8上遇到问题可能是什么问题?
值得一提的是我尝试使用:在我的脚本上使用utf8 并尝试使用
$db-> {mysql_enable_utf8} = 1
$db->do(qq{SET NAMES 'utf8';} );
但问题没有解决。
答案 0 :(得分:2)
如果我理解正确,你会看到
éëè
您期望的地方
éëè
使用phpMyAdmin时。这表示数据库中的数据错误(双重编码)。您需要返回并使用正确的数据重新填充数据库。
如果无法修复数据库,最好只添加以下内容:
utf8::decode($str); # Fix double-encoding
它将尝试解码数据库中已解码的数据。如果数据是双重编码的,这将解决它。如果数据没有经过双重编码,它将无法自动失败,在$str
中保留正确的值(假设您的字符串不是很奇怪)。
我建议您编写一个从数据库读取数据的小工具,使用此技巧修复数据,然后将其正确地放回数据库中。