Wir haben kürzlich einen seltsamen Fehler behoben. Eine Lösung wurde gefunden, aber die Lösung ist nicht vollständig zufriedenstellend.MDB2 trennt und vergisst die Zeichensatzeinstellung, wenn die Verbindung wiederhergestellt wird
Wir verwenden IntSmarty, um unsere Website zu lokalisieren und die lokalisierten Strings mit unserem eigenen Wrapper in einer Datenbank zu speichern. In seinem Destruktor speichert IntSmarty alle neuen Zeichenfolgen, die es möglicherweise hat, was zu einem Datenbankaufruf führt.
Wir verwenden eine Singleton-Instanz von MDB2, um Abfragen für MySQL auszuführen, und nach der Verbindung haben wir die SetCharset() - Funktion verwendet, um den Zeichensatz in UTF-8 zu ändern. Wir haben festgestellt, dass Strings, die von IntSmarty gespeichert wurden, beim Erstellen der letzten Inserts als ISO-8859-1 interpretiert wurden. Wir haben uns das Abfrageprotokoll genau angesehen und festgestellt, dass die Verbindung zu MySQL unterbrochen wurde, bevor IntSmartys Destruktor aufgerufen wurde. Es wurde dann wiederhergestellt, aber es wurde keine Abfrage "SET NAMES utf8" für die neue Verbindung ausgegeben. Dies führte dazu, dass die gespeicherten Strings von MySQL als ISO-8859-1 interpretiert wurden.
Es scheint keine Optionen zu geben, die den Standardzeichensatz für MDB2 festlegen. Unsere Lösung für dieses Problem bestand darin, die MySQL-Serverkonfiguration zu ändern, indem Sie my.cnf zu
hinzufügen. Das löst nur das Problem, dass unser Zeichensatz immer gleich ist.
Also, gibt es eine Möglichkeit, dass ich verhindern kann, dass die Verbindung abgebrochen wird, bevor alle Abfragen ausgeführt wurden? Kann ich erzwingen, dass die MDB2-Instanz nach allem anderen zerstört wird?
Permanente Verbindungen aktivieren funktioniert, ist aber keine erwünschte Antwort.