Hi,
ich habe seit längerem ein sehr merkwürdiges Problem was ich mir nicht erklären kann.
Situation 1:
- MySQL-DB auf einem Windows 7 Rechner (Encoding: UTF-8)
- Das Programm (JAR-Datei) liegt ebenfalls auf dem Windows 7 Rechner und benötigt zur Laufzeit eine DB-Connection zu der MySQL-DB (funktioniert ast rein)
Situation 2:
- MySQL-DB auf einem Linux Server (Encoding: UTF-8)
- Das Programm (JAR-Datei) liegt ebenfalls auf dem Linux Server und benötigt zur Laufzeit eine DB-Connection zu der MySQL-DB (funktioniert ast rein)
- Das Programm, welches sich auf dem Linux Server befindet, wird via Netzwerk von einem PC mit Windows 7 ausgeführt
Im ersten Fall (alles auf Windows 7 Rechner) funktioniert alles perfekt. Im zweiten Fall (Linux Server) funktionieren teilweise die Stringvergleiche nicht mehr:
Ich erhalte in einigen Fällen aus der Datenbank folgende Strings: "textvorher ?text? textnachher". "?" scheint ein Encoding-Fehler bei der Befüllung der Datenbank gewesen zu sein, worauf ich allerdings keinen Einfluss habe. Das eigentliche Zeichen war anscheinend ein Hochkomata o.ä. (zumindest würde dies zu der Struktur der Strings passen). Genau bei diesem Zeichen fliegen mir die EQUALS-Stringvergleiche in Situation 2 (Linux Server) um die Ohren... Bei Situation 1 (Win 7 Rechner) habe ich diese Problematik nicht. Hier ein Beispiel:
Bei diesem Beispiel würde die IF-Kaskade in den ELSE-Block springen, da der EQUALS-Vergleich false ergibt, und folglich den "neuen" Wert (input2) in ebenfalls in der Datenbank speichern. Wenn ich nun allerdings beide Werte aus der Datenbank per select auswähle, in Strings speicher und diese wiederum per EQUALS vergleiche sind sie auf einmal identisch bzw. EQUALS gibt true zurück.
Da ich das Problem bei der Situation 1 (alles auf Win 7 Rechner) nicht habe, tippe ich ganz stark auf ein Encoding-Problem. Allerdings habe ich keine Ahnung wo ich da überhaupt ansetzen könnte, da der gesamte Background (Datenbank und die Datenquelle für "input2" sowie dessen Verarbeitung) auf UTF-8-Encoding eingestellt ist. Da andere Sonderzeichen (wie " oder ä etc.) funktionieren Tippe ich ebenfalls darauf, dass bereits die Formatierung in der Datenquelle falsch/defekt ist.
Ich hoffe ich konnte mein Problem einigermaßen gut darstellen, aber ich muss gestehen, dass mir zur Beschreibung des Problems irgendwie die Fachwörter fehlen :/ Vorschläge für Google-Suchtexte würden mir auch schon weiterhelfen (da wollen mir einfach keine kurzen und prägnanten Schlüsselworte einfallen).
Vielen Dank schon mal im vor raus,
Zitzit
ich habe seit längerem ein sehr merkwürdiges Problem was ich mir nicht erklären kann.
Situation 1:
- MySQL-DB auf einem Windows 7 Rechner (Encoding: UTF-8)
- Das Programm (JAR-Datei) liegt ebenfalls auf dem Windows 7 Rechner und benötigt zur Laufzeit eine DB-Connection zu der MySQL-DB (funktioniert ast rein)
Situation 2:
- MySQL-DB auf einem Linux Server (Encoding: UTF-8)
- Das Programm (JAR-Datei) liegt ebenfalls auf dem Linux Server und benötigt zur Laufzeit eine DB-Connection zu der MySQL-DB (funktioniert ast rein)
- Das Programm, welches sich auf dem Linux Server befindet, wird via Netzwerk von einem PC mit Windows 7 ausgeführt
Im ersten Fall (alles auf Windows 7 Rechner) funktioniert alles perfekt. Im zweiten Fall (Linux Server) funktionieren teilweise die Stringvergleiche nicht mehr:
Ich erhalte in einigen Fällen aus der Datenbank folgende Strings: "textvorher ?text? textnachher". "?" scheint ein Encoding-Fehler bei der Befüllung der Datenbank gewesen zu sein, worauf ich allerdings keinen Einfluss habe. Das eigentliche Zeichen war anscheinend ein Hochkomata o.ä. (zumindest würde dies zu der Struktur der Strings passen). Genau bei diesem Zeichen fliegen mir die EQUALS-Stringvergleiche in Situation 2 (Linux Server) um die Ohren... Bei Situation 1 (Win 7 Rechner) habe ich diese Problematik nicht. Hier ein Beispiel:
Java:
//Input1 kommt aus der DB
String input1 = "?hallo?"
//Input2 kommt aus der Quelle aus welcher "input1" ebenfalls vor der DB-Speicherung kam
String input2 = "?hallo?"
if(input1.equals(input2)){
} else {
//Speicherung von "input2" in der Datenbank (andere Tabelle als die wo input1 gespeichert ist)
}
Bei diesem Beispiel würde die IF-Kaskade in den ELSE-Block springen, da der EQUALS-Vergleich false ergibt, und folglich den "neuen" Wert (input2) in ebenfalls in der Datenbank speichern. Wenn ich nun allerdings beide Werte aus der Datenbank per select auswähle, in Strings speicher und diese wiederum per EQUALS vergleiche sind sie auf einmal identisch bzw. EQUALS gibt true zurück.
Da ich das Problem bei der Situation 1 (alles auf Win 7 Rechner) nicht habe, tippe ich ganz stark auf ein Encoding-Problem. Allerdings habe ich keine Ahnung wo ich da überhaupt ansetzen könnte, da der gesamte Background (Datenbank und die Datenquelle für "input2" sowie dessen Verarbeitung) auf UTF-8-Encoding eingestellt ist. Da andere Sonderzeichen (wie " oder ä etc.) funktionieren Tippe ich ebenfalls darauf, dass bereits die Formatierung in der Datenquelle falsch/defekt ist.
Ich hoffe ich konnte mein Problem einigermaßen gut darstellen, aber ich muss gestehen, dass mir zur Beschreibung des Problems irgendwie die Fachwörter fehlen :/ Vorschläge für Google-Suchtexte würden mir auch schon weiterhelfen (da wollen mir einfach keine kurzen und prägnanten Schlüsselworte einfallen).
Vielen Dank schon mal im vor raus,
Zitzit