Чтобы правильно получить utf-8 из базы данных, вам нужно при подключении явно сказать ему:
my $dbh = DBI->connect( "dbi:mysql:dbname=$db;host=localhost",
"user", "pwd", {mysql_enable_utf8 => 1 })
Как я и задавал в своем вопросе здесь , с ним все еще есть некоторые проблемы,но в большинстве случаев это работает нормально.
Ответить «почему» - часть намного сложнее.Как отметил Денис, в последнее время была довольно тяжелая тема о «почему».Может быть, это поможет вам понять связанные вещи.Я предлагаю использовать модуль utf8::all
`, чтобы работать с utf-8 намного проще и чище.