Stringlänge wenn UTF-8 Zeihen enthalten sind

Bei der Konvertierung aber auch beachten:
a) Die Zeichensatzeinstellungen und Kollationen von Tabellen und Spalten zu setzen.
b) Bei Unique/Key-String-Spalten kann es wegen der UTF8-Kollationen plötzlich zu Doppelwerten kommen.
Das muss je nach Fall speziell behandelt werden.
c) Stringspalten mit einer großen Länge überschreiten durch Umstellung evt.
die maximal zulässige Maximalbytegröße eines Datensatzes.
c) Indexe weg und neu erstellen

@mermshaus: Haben diese Editoren HTML-Wysiwyg, bzw. welche davon?
Dachte eigentlich, das gibts irgendwie nirgends... (die heutigen Browser sind ja auch ziemlich komplex...)
 
Zuletzt bearbeitet:
Ja
Wieviel Tabellen gibts denn ungefähr? Und wieviel Datensätze gesamt (ganz grob. 1000? 1000000?).
Tabellen 18 und ca 20000 Datensätze
Zugriff per PHPmyAdmin oder sogar SSH?
PhpMyAdmin
$value = html_entity_decode($value, ENT_QUOTES, 'UTF-8');
Der Teufel liegt wie immer im Detail ;)
Bereits bestehende Werte in der DB kannst du mit einem Script konvertieren.
Super... Eure Hilfe ist echt super! Für alles weitere habe ich jetzt erstmal ein paar Tage zu tun. Danke.
 
So... hat mich doch nur einen Tag Arbeit gekostet aber nun bin ich dank Euch auf dem richtigen Weg.
Kurze Zusammenfassung:
  • Als Editor erstmal NetBeans installiert und mich kurz darauf gefragt warum ich mich jahrelang so unkonfortabel mit dem "Alten" rumgeärgert habe.
  • Eine neue Datenbank angelegt und alle Strukturen importiert und konsequent auf UTF-8 umgestellt.
  • Die Datenbank als default auch auf UTF-8
SQL:
"ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci"
  • nun die Daten der alten Datenbank importiert mittels phpMyAdmin
  • damit folgend die Variablen auch in UTF-8 gespeichert werden musste ich noch nach der Datenbankverbindung den Zeichensatz der Verbindung einstellen
SQL:
mysql_set_charset('utf8', $db);
  • alle 'title' Felder nach Unicode durchsucht und geändert
PHP:
$query = "SELECT * FROM myTable WHERE (title LIKE '%&#%')";
$result = mysql_db_query($db_name, $query);
if (($result) && (mysql_num_rows($result) > 0)) {
  while ($row = mysql_fetch_array($result)) {
    $value = html_entity_decode($row['title'], ENT_QUOTES, 'UTF-8');
    $query = "UPDATE myTable SET title='" . $value . "' WHERE id = " . $row['id'];
    mysql_db_query($db_name, $query);
  }
}
  • und schon lief fast alles zufriedenstellend
Ich danke Euch nochmal für die super Hilfe!
 
Ganz fertig bist du trotzdem noch nicht: Die mysql_ - Funktionen müssen weg.
a) Seit 10 (?) Jahren gibts was Besseres
b) In den letzten paar Jahren hat PHP bei jeder Verwendung schon Warnungen ausgegeben (man hätte sie sich nur anschauen müssen...)
c) In den aktuellen PHP-Versionen existieren diese Funktionen einfach nicht mehr. Dass es überhaupt noch funktioniert liegt also nur daran, dass deine Software alt ist.

Für zukuntssicheren Code siehe MysqlI oder PDO.
 

Neue Beiträge

Zurück