Я немного запутался и не нашел ответа. Так что я надеюсь найти здесь помощь.
У меня есть небольшая mysql таблица:
CREATE TABLE `datatable` (
`Artikelnummer` varchar(10) NOT NULL,
`Bezeichnung` varchar(25) NOT NULL,
`Länge` mediumint(6) DEFAULT NULL,
`Breite` mediumint(6) DEFAULT NULL,
`Höhe` mediumint(6) DEFAULT NULL,
`Vö-Datum` date DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `datatable`
(`Artikelnummer`, `Bezeichnung`, `Länge`, `Breite`, `Höhe`, `Vö-Datum`)
VALUES ('123456', 'Hängematte', 12, 20, 35, '2020-08-31');
ALTER TABLE `datatable`
ADD PRIMARY KEY (`Artikelnummer`);
и мой тестовый сценарий perl:
#!/usr/bin/perl
use warnings;
use strict;
use utf8;
use CGI qw (:standard);
use DBI;
use Data::Dumper;
use DBIx::Log4perl;
binmode(STDOUT, ':utf8');
my $dbh = '';
if ($dbh = DBIx::Log4perl->connect("DBI:mysql:test","user","password",{
RaiseError => 1,
PrintError => 1,
mysql_enable_utf8 => 1
}))
{
$dbh->do('SET NAMES utf8');
$dbh->do('SET CHARSET utf8');
my $sql_query
= 'SELECT * FROM datatable WHERE Artikelnummer = ?';
my $out = $dbh->prepare($sql_query);
$out->execute( "123456" )
or die 'Select-Fehler: '.$dbh->errstr();
my $Content = $out->fetchrow_hashref();
$out->finish();
# Test 1
if ($Content->{'Bezeichnung'} eq 'Hängematte') {
print "Test 1: Content Hängematte found!\n";
}
# Test 2
if (defined $Content->{'Höhe'}) {
print "Test 2: Key Höhe found!\n";
} else {
print "Test 2: Key Höhe not found!\n";
}
# Hack: Hardcore BadHack!!!
$Content->{'Höhe'} = $Content->{'Höhe'};
$Content->{'Länge'} = $Content->{'Länge'};
$Content->{'Vö-Datum'} = $Content->{'Vö-Datum'};
# Test 3
if (defined $Content->{'Höhe'}) {
print "Test 3: Key Höhe found!\n";
} else {
print "Test 3: Key Höhe not found!\n";
}
print Dumper($Content);
} else {
print "Verbindungsfehler: " . $dbh->errstr();
}
exit(0);
Результат:
Log4perl: Seems like no initialization happened. Forgot to call init()?
Test 1: Content Hängematte found!
Test 2: Key Höhe not found!
Test 3: Key Höhe found!
$VAR1 = {
'Vö-Datum' => '2020-08-31',
'Länge' => 12,
'Höhe' => 35,
'Höhe' => 35,
'Breite' => 20,
'Länge' => 12,
'Bezeichnung' => "H\x{e4}ngematte",
'Vö-Datum' => '2020-08-31',
'Artikelnummer' => '123456'
};
Во-первых, проигнорируйте предупреждение Log4 perl, потому что это всего лишь пример кода, демонстрирующий мою проблему. ; -)
Мой вопрос в том, как мне получить правильные закодированные ha sh -ключи без этого плохого взлома в примере или другой вопрос, почему я получаю строки таблицы не в кодировке utf8 в моем ha sh ?
Я использую perl 5.25, DBIx :: Log4 perl 0.26, DBI 1.642 и mySQL server 5.7.31