Thread Verfasser: Rolly8-HL
Thread ID: 881
Thread Info
Es gibt 15 Beiträge zu diesem Thema, und es wurde 4628 Mal angesehen.
 Thema drucken
Umlaute in der DB
Rolly8-HL
Umlaute in der Datenbank werden als Reinschrift abgelegt, ÄÖÜäöüß.
In der V7 aber als ÄÖÜäöüß welche Vorteile bringt es jetzt in der V9 es als ÄÖÜäöüß abzulegen.

Wenn ich ein Upgrade von V7 auf V9 mache muss alles in der gesamten DB umgeschrieben werden, was sich für mich erklärt das ich ein Zeitabbruch habe und das Upgrade unter Umständen nicht Richtig durchführen kann.

Wieso hat man es nicht so gelassen?


Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
 
John Doe
In der V7 war das Umlauteproblem ein Fehler, der nie final gefixt wurde. In der neuen V9 wurde dieser Fehler nun behoben und alles auf UTF-8 gestellt. It's not a bug, it's a feature Wink


Dieses Mitglied wurde gelöscht!
 
Rolly8-HL
Ich will nicht Behaupten das es ein/kein Fehler war/ist/behoben oder jetzt umgestellt wurde wie es eigentlich sein sollte.

Es bringt mich nur nicht recht weiter meine V7 auf V9 um zu stellen wenn ich einen Zeitanbruch habe und die Umstellung durch das Upgrade nicht zu ende gebracht werden kann.

Die deutschen Umlaute sind da wohl noch das kleinere Übel, wenn ich mir das Upgrade anschaue sind es über 160 Zeichen nach der in der gesamten DB gesucht werden kann, wie bitteschön soll das korrekt ablaufen mit Zeitabbruch?

Bei einer V7 ohne nennenswerten Menge an DB und Datensätzen habe ich auch kein Problem gehabt.

Werde wohl gezwungen sein alle DB nacheinander um zu schreiben und aus dem Upgrade einiges weg lassen was da dann Überflüssig geworden ist.

Oder hat man da in der zwischen zeit schon neue Erkenntnisse für einen besseren Übergang von V7 auf V9?

Zusammengefügt am 20. Mai 2016 um 13:24:42:
Nachtrag:

Andere Frage, ich möchte meine V7 gerne so umstellen wie das bei der V9.

Also Reinschrift in die DB schreiben lassen, um das richtig Auslesen zu lassen hätte ich da einen Ersatz.

Meine Frage wie stelle ich das an damit der Text (Umlaute & Co.) als Reinschrift abgelegt wird und ausgelesen werden kann genauso wie bei der V9.

Das umstellen der DB auf ENGINE=MyISAM DEFAULT CHARSET=UTF8 COLLATE=utf8_unicode_ci ist nicht das Problem.

Hat jemand eine Idee nach was ich suchen muss in der V9 und V7?


Bearbeitet von Rolly8-HL am 20.05.2016 um 13:25
Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
 
Wemi
Du musst ja nicht nur die DB einfach umstellen, sondern auch alle Zeichen (sind zum Größtenteil ja die Umlaute) alle konvertieren. Wie man es lösen kann, erkennt man ja im setup von der V9. Bei Github hat auch jemand mal eine Datei veröffentlicht, mit der man die DB entsprechend umschreiben kann. Leider konnte das Tool auch keine großen Datenmengen in einem Rutsch umschreiben. Hatte ich schon mal bei einer 5 GB großen Datenbank versucht.

Dann in der header.php bzw. in der locale/.../global.php glaube ich, von ISO bzw. windows auf UTF-8 umstellen.

Die Datenbankverbindung mit UTF-8 initialisieren. Weiss allerdings nicht ob mysql dies unterstützt. Ansonsten kann ich gerne eine Datei zur Verfügung stellen, die die Datenbankanfragen mittels PDO durchführt. Wobei hier dann ein noch größer Aufwand betrieben werden muss.

Folgender Code sollte ebenfalls in die maincore.php eingetragen werden.

Code 

header('content-type: text/html; charset=utf-8');



Damit wird demm Browser mitgeteilt, dass UT-8 Code ankommt. Dies kann man auch in der httpd.conf oder über die .htaccess Datei lösen, wenn man entsprechenden Zugriff bzw. der Hoster dies erlaubt.

Ach, und natürlich müssen alle Dateien in UTF-8 ohne BOM abgespeichert sein. Ist bei Fusion V7 nicht immer der Fall, besonders bei den Infusionen, Panels und Themes. Habe auch schon mal Sprachdateien (ich glaube sogar deutsche) gefunden, die noch nicht unter UT-8 gespeichert waren.

So hoffe, dass ich nichts vergessen habe.


"Es geht hier um die Frage, ob die Menschheit ohne Religion besser dastünde. Und ich sagte: ja" Ben Moore
 
Rolly8-HL
Hallo, besten Dank für dies Umfangreiche Antwort, soweit habe ich das verstanden, habe es auch schon so versucht.

1. Problem: wenn ich ÄÖÜäöüß in die DB setze kommt Müll an der Ausgabe an, ist soweit klar.
2. Problem: wenn ich ÄÖÜäöüß abspeichern will kommt es nicht als Reinschrift in der DB an.

Wenn ich wüste wie ich das mit dem Input machen muss das es als Reinschrift in der DB ankommt könnte es mir schon weiter helfen.

Um alle DB in Reinschrift zu ändern habe ich schon was, ist aber momentan nicht nötig.

Möchte das nur für eine Infusions haben an der ich bei bin, später dann alles umstellen.

Zusammengefügt am 20. Mai 2016 um 20:27:08:
Habe mir zum testen ein Seite gebastelt, in der $userdata['user_location'] steht bei mir Lübeck in Reinschrift.
Und das ist das Ergebnis.
Zitat: Falsch: L�beck
Richtig: Lübeck
Richtig: Lübeck
Richtig: Lübeck
Richtig: Lübeck

Code 

<?php

   require_once "maincore.php";
   
####### in der DB steht Lübeck als Reinschrift   
echo "Falsch: ".$userdata['user_location'];

echo "<br />Richtig: ".utf8_encode($userdata['user_location']);

echo "<br />Richtig: Lübeck";
 ?>
 <br />
Richtig:  L&uuml;beck
 <br />
Richtig: Lübeck



Bearbeitet von Rolly8-HL am 20.05.2016 um 20:27
Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
 
Wemi
Deine DB-Verbindung auf UTF-8?
Die Datenbanktabelle auf UTF-8?
Die Datei in UTF-8 ohne BOM gespeichert?


"Es geht hier um die Frage, ob die Menschheit ohne Religion besser dastünde. Und ich sagte: ja" Ben Moore
 
Rolly8-HL
Jeep, habe ich alles gemacht, habe eine neue V7 aufgelegt und schon in der Setup alles umgestellt bevor ich die Installiert habe.

DB stehen alle auf MyISAM und utf8_unicode_ci

global.php

Code 

// Sprachdatei Einstellungen
setlocale(LC_TIME, "de_DE.UTF8", "de", "DE");
$locale['charset']   = "UTF-8";
$locale['xml_lang']  = "de";
$locale['tinymce']   = "de";
$locale['phpmailer'] = "de";


header.php

Code 

echo "<meta http-equiv='Content-Type' content='text/html; charset=".$locale['charset']."' />\n";



Seiteneigenschaften => Titel/Kodierung (UTF-8) ohne (BOM)

Habe nebenbei mal in Wordpress geschaut da steht es auch in Reinschrift in der DB.

Sieht so aus als wenn es irgendwo tiefer in V7 verwurzelt ist, nur wo?

Nach was könnte man da mal suchen um es zu finden was diesen Unterschied ausmacht?


Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
 
Wemi
Verbindest du dich noch mit mysql oder hast du schon auf PDO umgestellt?

Ist es noch auf mysql, dann direkt hinter dem Connect in der maincore.php folgendes einfügen.

Code 

mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");



Dann sollte das mit den Umlauten kein Problem mehr darstellen.


"Es geht hier um die Frage, ob die Menschheit ohne Religion besser dastünde. Und ich sagte: ja" Ben Moore
 
Rolly8-HL
Jeep, genau das war das Ding, habe jetzt beides wie erwartet.
Speichern in die DB in Reinschrift und Ausgabe Korrekt.

Danke, keine weitere Fragen an den Doktor.

Zusammengefügt am 21. Mai 2016 um 12:37:47:
Doch eine Frage habe ich noch.
Habe das jetzt zusätzlich in meine Infusions eingebaut in einer anderen Core.
Da wo es nicht in der maincore.php steht.

Code 

mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");



Klappt wunderbar abspeichern in DB und Ausgabe, es wird jetzt aber auch auf den Rest der Core vererbt wenn diese Panel erscheint.

Kann man das auch so begrenzen das es sich nur speziell auf diese Panel bezieht und für den Rest keine Auswirkung hat?

Ansonsten wird mir der Rest der Seite ja falsch ausgegeben da es sich ja um verschiedene Schriftzeichen in der DB handelt.


Bearbeitet von Rolly8-HL am 21.05.2016 um 12:41
Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
 
Wemi
Du müsstest nach deiner Abfrage die Datenbankverbindung schliessen und wieder neu aufbauen.

Ich allerdings würde den Rest der Datenbank auch auf UTF-8 umstellen. Denn eventuell hast du trotzdem Umlaute Fehler, besonders wenn das Charset (der HTML Header) später umgestellt wurde.


"Es geht hier um die Frage, ob die Menschheit ohne Religion besser dastünde. Und ich sagte: ja" Ben Moore
 
Rolly8-HL
Ja das ist Richtig, so bald ich alle DB in Reinschrift umgestellt habe und das in der maincore.php einsetze ist es da dann natürlich überflüssig.

Zitat: Du müsstest nach deiner Abfrage die Datenbankverbindung schliessen und wieder neu aufbauen.


Wie macht man das und wo muss das in der Datei hin damit es aus der Seite der Panel nicht weiter aktiv ist?

Zusammengefügt am 21. Mai 2016 um 19:16:30:
Ich glaube das hat sich erledigt, hatte es über der THEMES."templates/header.php eingesetzt, hab es jetzt so gemacht und scheint zu klappen.

Code 

   require_once THEMES."templates/header.php";
   
   mysql_query("SET NAMES 'utf8'");
   mysql_query("SET CHARACTER SET 'utf8'");



Zusammengefügt am 21. Mai 2016 um 19:26:24:
Doch nicht ganz, in der Mittel Panel ist das OK aber jetzt nicht in der Seiten Panel, setze ich das da auch mit ein ist es soweit OK aber jetzt wird es auf die da drunter weiter vererbt, wie kann ich das weg bekommen?


Bearbeitet von Rolly8-HL am 21.05.2016 um 19:26
Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
 
Wemi
In der maincore.php müsste eigentlich eine entsprechende Funktion zur Verfügung stehen.

Schaue doch mal in der templates/footer.php, wie es gemacht wurde.


"Es geht hier um die Frage, ob die Menschheit ohne Religion besser dastünde. Und ich sagte: ja" Ben Moore
 
Rolly8-HL
Zitat: mal in der templates/footer.php, wie

Hatte ich auch schon versucht, leider hackt es mir die Seite auseinander, habe auch andere Sachen versucht ohne Erfolg.

Entweder es geht nicht es zerreißt mir die Optik oder Fatalen Fehler.

Ist aber nicht so Tragisch, sollte jemand was über den Weg laufen was helfen könnte bin ich Dankbar für einen Tipp.

Wichtig für mich ist nur das ich meine V7 komplett umstellen kann und das hat ja geklappt.

Noch mal besten Dank für diese Hinweise.


Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
 
Wemi
Oder du versuchst mal nach deiner Abfrage, also am Ende deines Panelcodes die Verbindung wieder auf Latin umzustellen:

Code 

 mysql_query("SET NAMES 'latin1'");
   mysql_query("SET CHARACTER SET 'latin1'");



"Es geht hier um die Frage, ob die Menschheit ohne Religion besser dastünde. Und ich sagte: ja" Ben Moore
 
Rolly8-HL
Wieso bin ich nicht selbst drauf gekommen? sollte doch eigentlich Logisch sein.

Hat geklappt, alles da drunter ist jetzt wieder in Ordnung.

Zusammengefügt am 08. Juni 2016 um 12:04:00:
Nachtrag:

Hallo, habe mich mal ran gesetzt ein "Zeichen Konverter" Panel zu bauen.

In dem werden alle DB aufgeführt, können ausgewählt werden alle, einzeln, mehrfach, und die DB wird dahingehend umgeschrieben mit.

Code 

dbquery("ALTER TABLE ".$table."  ENGINE=MyISAM ");
dbquery("ALTER TABLE ".$table." CONVERT TO  CHARACTER SET utf8 COLLATE utf8_unicode_ci");


inc. der Umlaute.

Habe es getestet, alle werden richtig umgeschrieben bis auf 3 Ausnahmen
Zitat: messages_options
poll_votes
thread_notify

die bleiben weiterhin auf latin1_swedish_ci bestehen, was mache ich falsch?


Bearbeitet von Rolly8-HL am 08.06.2016 um 12:04
Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
 
Springe ins Forum: