Я не уверен, если это ошибка или я делаю что-то неправильно:Perl DBI/Mysql Unicode Bug
Я прочитал данные на
open my $fh, "<:encoding(iso-latin1)", $file or die "Failed to open $file: $!";
$ файл, безусловно, в изо-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 знает, что база данных ожидает байты iso latin, а не utf8. – tim
Почему вы думаете, что Perl это знает? –