Aktivieren Sie UTF8, wenn Sie eine Verbindung zur Datenbank wie folgt herstellen:
my $dbh = DBI->connect(
"dbi:mysql:dbname=db_name",
"db_user", "db_pass",
{RaiseError => 0, PrintError => 0, mysql_enable_utf8 => 1}
) or die "Connect to database failed.";
Damit sollten Sie Zeichenketten im Zeichenmodus mit gesetztem UTF8-Flag nach Bedarf erhalten.
Desde DBI Allgemeine Schnittstellenregeln und Vorbehalte :
Perl unterstützt zwei Arten von Zeichenketten: Unicode (intern utf8) und Nicht-Unicode (standardmäßig iso-8859-1, wenn eine Kodierung angenommen werden muss). Treiber sollten beide Arten von Strings akzeptieren und, falls erforderlich, in den Zeichensatz der verwendeten Datenbank konvertieren. Ebenso sollte der Treiber beim Abrufen von Zeichendaten aus der Datenbank, die nicht iso-8859-1 sind, diese in utf8 konvertieren.
Und die Einzelheiten aus DBD::mysql für mysql_enable_utf8
Außerdem teilt das Einschalten dieses Flags MySQL mit, dass eingehende Daten als UTF-8 behandelt werden sollen. Dies wird nur wirksam, wenn es als Teil des Aufrufs von connect() verwendet wird. Wenn Sie das Flag nach dem Verbindungsaufbau einschalten, müssen Sie den Befehl SET NAMES utf8 eingeben, um den gleichen Effekt zu erzielen.
0 Stimmen
Reduzieren Sie Ihren Code auf das kürzestmögliche Skript, das das Problem noch immer aufweist. Nehmen Sie die Datenbank aus der Gleichung heraus, um herauszufinden, ob das Problem etwas mit Perl zu tun hat. Entwickeln Sie etwas, das andere testen und debuggen können.