Wunderwaffe SET NAMES, SET CHARACTER SET

Nur zwei eine Zeilen Code genügt, um Herr über das Chaos der Zeichencodierung eines PHP-MySQL-Projektes zu werden. Falls jemand von euch auch mal vor dem Problem stehen sollte, dass Umlaute trotz aller Experimente die „Datenbank-Kollation“ und „charset“ auf UTF-8 umzustellen nicht wie gewünscht dargestellt bzw. abgelegt werden, dann spart euch erstmal den Versuch durch wildes Ersetzen der „krummen“ Zeichen das Problem in den Griff zu bekommen. Versucht erst einmal folgende zwei Zeilen Code in eure Datenbank-Verbindung einzutragen:

mysql_query("SET NAMES 'utf8'");

UPDATE: Im Gesamtzusammenhang könnte die Datenbankverbindung dann so aussehen:

$con = mysql_connect("localhost","user","password");
 
if (!$con) {
  die('Could not connect: ' . mysql_error());
}
 
mysql_select_db("database", $con);
mysql_query("SET NAMES 'utf8'");
// mysql_query("SET CHARACTER SET 'utf8'");

Bei meinem Problem hat es Wunder gewirkt. Warum bin ich nicht schon viel früher darauf gestoßen? Hier noch der Link zur offiziellen Doku  SET NAMES, SET CHARACTER SET P.S. Danke an Oliver, damit hat sich der Aufwand nochmals um eine Zeile reduziert 🙂

23 Comments

  1. Hi,
    Danke für diesen Tip! Habe ewig Probleme mit jQuery gehabt. Das Konvertieren von scripts und db in utf-8 alleine hat nichts gebracht. Aber diese kleine Erweiterung hat geholfen. Ich bin sehr erleichtert.
    Danke sehr!

    Reply
  2. Vielen Dank, ich wollte es erst nicht probieren weil es zu einfach schien – aber ja, das war es und 5 stunden Kopfkratzen sind endlich beendet!

    Reply
  3. Grandios! Danke!! Bastel seit mehreren Stunden an encode()-Varianten und anderem rum! Alles Mist!

    Nur ein Tipp für die Leute, die manchmal die selben dummen Fehler machen:
    Setzt mysql_query(„SET NAMES ‚utf8′“); vor mysql_query($sql-befehl); ein 😀

    Reply
  4. Herzlichen Dank!
    Dieser Tipp hat mich von stundenlangen Suchen erlöst! Suuuuuuper!
    Jetzt funktioniert der Eintrag in die mySQL mit Umlauten!

    Besten Dank!

    Reply
  5. Ja, das hat auch mir geholfen.

    Ich bin habe meine Daten auf einem Server in den USA aufgespielt. Da traten das erste Mal Probleme in der Datenbank mit den Umlauten auf, die ich von anderen Servern nicht kannte. Wahrscheinlich weil dort utf8 eingestellt ist und bei den deutschen Servern nicht.

    Nun hätte ich dan den entscheidenen Stellen jeweils mit utf8_decode() bzw _encode() arbeiten können.

    Es klappt aber auch und zwar einfacher mit mysql_query(“SET NAMES ‘latin1′”). Mit dieser Einstellung weiß mysql nun, dass Sonderzeichen aus westeuropäischer Sprachen in die Datenbank gelangen.

    Reply
  6. Tausend Dank! Bin hier in einem PHP-/MySQL-Kurs und es gab keine Lösung bis zu diesem Hinweis!
    Danke auch an Robin für den Hinweis mit der richtigen Stelle.

    Reply
  7. thx
    ______

    set names ‚utf8‘;

    Dies entspricht dem Parameter –default-character-set=“UTF8“ beim MySQL-Client.

    Das wars.

    Naja, nicht ganz. Wir können natürlich an der MySQL-Konfiguration herumschrauben und dort UTF-8 als Standard setzen. Hier der entsprechende Auszug aus meiner MySQL-Konfiguration :

    [mysql]
    default-character-set=utf8

    [mysqld]
    collation_server=utf8_unicode_ci
    character_set_server=utf8

    Allerdings kann das zu unangenehmen Überraschungen führen, wenn das System migriert wird. Und wenn erst einmal richtige UTF-8 und ANSI-UTF-8-Mischmasch-Daten in einer Tabelle stehen ist Spaß garantiert.

    Reply
  8. Vielen Dank!
    Mit diesem Beitrag als Grundlage habe ich auch mein Problem gelöst.
    Für mySQLi sieht die Lösung so aus:
    $db = mysqli_connect(„localhost“, „user“, „password“, „database“);
    mysqli_set_charset($db, „utf8“);

    Reply
  9. Vielen Dank auch sehr hilfreich, beim import von alten sql dateien in ansi format auf den mysql server mit utf8
    Set names latin1;
    Insert into(…

    Reply

Leave a Comment.