Raketenwilli: Über „Butter und Fische“, Theorie und Praxis

Beitrag lesen

https://metacpan.org/pod/DBD::MariaDB

Automatische Übersetzung:


UNICODE-UNTERSTÜTZUNG

Alle stringorientierten Variablentypen (char, varchar, text und ähnliche Typen) werden von DBD::MariaDB als Unicode-Strings gemäß dem Standard-Perl-Unicode-Modell dargestellt. Das bedeutet, dass Perl-Skalare Unicode-Codepunkte und keine UTF-8-Bytes enthalten. Intern verwendet DBD::MariaDB den utf8mb4Zeichensatz von MySQL für die Netzwerkkommunikation mit MariaDB- und MySQL-Servern. Es wandelt den Netzwerk-MySQL- utf8mb4Zeichensatz automatisch in die Unicode-Perl-Skalare um und umgekehrt.

Der Zeichensatz von MySQL utf8mb4für die Netzwerkkommunikation wird durch MYSQL_SET_CHARSET_NAMEdie C-Bibliotheks-API libmariadb/libmysqlclient konfiguriert. Dies ist eine Voraussetzung für eine funktionierende Anführungszeichenmethode und einen emulierten clientseitigen Platzhalterersatz.

Versuchen Sie nicht, den Netzwerkzeichensatz (z. B. per SQL-Befehl manuell) auf etwas anderes als UTF-8 zu ändern, da dies die zugrunde liegende C-Bibliothek verwirren würde und DBD::MariaDB sich schlecht verhalten würde (z. B. zu einer fehlerhaften/unsicheren Anführungszeichenmethode oder einer emulierten Clientseite SET NAMESführen würde). Platzhalterersatz).

Die Verwendung eines Nicht-UTF-8-Zeichensatzes für eine Spalte, Tabelle oder Datenbank ist in Ordnung, da der MariaDB- oder MySQL-Server den Speicherzeichensatz automatisch in den vom Netzwerkprotokoll ( utf8mb4) verwendeten Zeichensatz umwandelt. Beachten Sie, dass DBD::MariaDB beim Herstellen einer Verbindung zum MariaDB- oder MySQL-Server einen SQL-Befehl aufruft, SET character_set_server = 'utf8mb4'um sicherzustellen, dass der Standardzeichensatz für neue Datenbanken UTF-8 ist. Beachten Sie, dass ein Standardzeichensatz für neue Tabellen aus einem Datenbankzeichensatz festgelegt wird.

Falls der MySQL-Server den MySQL- utf8mb4Zeichensatz für ein Netzwerkprotokoll nicht unterstützt, würde DBD::MariaDB versuchen, den MySQL- utf8Zeichensatz zu verwenden, der eine Teilmenge der UTF-8-Codierung ist, die auf die 3-Byte-UTF-8-Sequenzen beschränkt ist. Die Unterstützung für den Zeichensatz von MySQL utf8mb4wurde in der MySQL-Serverversion 5.5.3 eingeführt.


Ich dreh am Rad.

Das bleibt so, wenn Du keine „Butter bei die Fische tust“.

Denn für alles weitere müsste ich mehr sehen:

  • Verbindungsgaufbau, hierfür genutzter DBI-Treiber (noch mysql oder schon MariaDB?)
  • genutzte Perl-Module
  • Datenquelle (Eingabe?)
  • Ausgabe
  • wie das Perl-Skript gestartet wird (Umgebungsvariablen)
  • genutzte Perl-Module
  • e.t.c.

Ich weiß nicht und sehe auch nicht, welchen Weg Deine Daten nehmen. Wie soll ich also helfen?

Der Beginn einer wirklichem Hilfe bei Zeichensatzproblemen setzt anno 2024 immer voraus, dass die Bereitschaft besteht, ganze Projekte (Datenquellen, Speicher, Verarbveitung, Ein- und Ausgaben) auf modernes UTF8 umzustellen - statt zu versuchen, hier mit Kompatibilitätskrücken zu arbeiten, also zu „murksen“. Genau das macht - „***Überraschung!****“ - im Hinblick auf immer wieder aufscheinende Probleme letztendlich mehr Arbeit.