1
我不知道这是否是一个错误或我做错了什么:每的Perl DBI/MySQL的Unicode的错误
open my $fh, "<:encoding(iso-latin1)", $file or die "Failed to open $file: $!";
$文件
我读出的数据绝对是ISO-latin1的。
然后,我有一个MySQL表是
ENGINE=InnoDB AUTO_INCREMENT=53072 DEFAULT CHARSET=latin1
我检查连接设置:
$dbh->prepare("show variables");
其中给出
character_set_client, latin1
character_set_connection, latin1
character_set_database, latin1
character_set_filesystem, binary
character_set_results, latin1
character_set_server, latin1
character_set_system, utf8
所以对我来说一切都应该罚款:
- 表是异LATIN1
- 数据被异latin1的(应该是现在perl的内部字符格式)
- 连接信息显示正确的设置
- 输出到STDOUT(终端为异丙latin1的)正确
但是:表中的数据是普通的utf8(在这种情况下很可能是perl的内部格式)。
我是否错过了这可能是DBI/DBD :: mysql中的一个错误?
我知道编码可能会解决这个问题,但不应该perl处理这个自动?我的意思是这里没有歧义:Perl知道数据库需要iso拉丁字节而不是utf8字符。 – tim 2014-10-19 10:31:46
你为什么认为Perl知道? – 2014-10-19 15:51:40