Puhmuckel: UTF-8 in mysql Datenbank

Guten Abend,

mir bleibt nichts übrig als weiter hier im Forum zu fragen.
Kann mir jemand sagen wie man über phpmyadmin UTF-8 Daten in die Datenbank bekommt ?

Und wie stellt man die mysql DB komplett auf utf-8 um.
Habe nun mittlerweile in mehreren Foren gefragt. Ist es möglich, dass ich der einzige bin, der außereuropäische Fremdsprachen in der DB speichern möchte ?

Kann doch wohl nicht sein, oder ?

Danke

  1. Moin!

    mir bleibt nichts übrig als weiter hier im Forum zu fragen.
    Kann mir jemand sagen wie man über phpmyadmin UTF-8 Daten in die Datenbank bekommt ?

    Welche Version von PHPMyAdmin hast du? Ich habe eine Loginseite gefunden, auf der man sich auswählen kann, welche Sprache verwendet werden soll, und da war "Deutsch" sowohl als "ISO-8859-1" und auch als "UTF-8" auswählbar - letzteres brauchst du mindestens mal. Das war Version 2.6.0-alpha 2 (was Google so alles findet).

    In Version 2.5.7-pl2 gibts diese Auswahlliste auch. Alte Versionen haben das aber nicht. Aktualisiere dein PHPMyAdmin auf jeden Fall mal.

    Aber dir kann natürlich immer noch passieren (das habe ich nicht getestet), dass PHPMyAdmin eine Prüfung der verwendeten MySQL-Version vornimmt und konvertiert.

    Dann kannst du PHPMyAdmin nicht nehmen, sondern mußt dir - hatte ich aber schonmal geschrieben - selbst kurz eine Oberfläche zum Füllen der DB schreiben. Das kann doch nicht so schwer sein.

    Und wie stellt man die mysql DB komplett auf utf-8 um.

    Gar nicht. Entweder hast du MySQL 4.1 (das gibts bislang nur als Alphaversion, die produktiv einzusetzen ist nicht ratsam), oder du hast eine Version davor - die kann zwar UTF-8-Zeichen speichern, aber sie versteht sie nicht - was den Speichervorgang nicht beeinträchtigt.

    - Sven Rautenberg

    1. Hallo,

      Welche Version von PHPMyAdmin hast du? Ich habe eine Loginseite gefunden, auf der man sich auswählen kann, welche Sprache verwendet werden soll, und da war "Deutsch" sowohl als "ISO-8859-1" und auch als "UTF-8" auswählbar - letzteres brauchst du mindestens mal. Das war Version 2.6.0-alpha 2 (was Google so alles findet).

      Ich habe immer die aktuellste natürlich. :) Das mit den Sprachen ist ja wohl klar. Damit habe ich auch schon einige Stunden rumexperimentiert. Ohne Erfolg.

      In Version 2.5.7-pl2 gibts diese Auswahlliste auch. Alte Versionen haben das aber nicht. Aktualisiere dein PHPMyAdmin auf jeden Fall mal.

      Siehe oben.

      Aber dir kann natürlich immer noch passieren (das habe ich nicht getestet), dass PHPMyAdmin eine Prüfung der verwendeten MySQL-Version vornimmt und konvertiert.

      Ich habe mysql 4.0.20a

      Dann kannst du PHPMyAdmin nicht nehmen, sondern mußt dir - hatte ich aber schonmal geschrieben - selbst kurz eine Oberfläche zum Füllen der DB schreiben. Das kann doch nicht so schwer sein.

      Ja aber wie machen die anderen Leute das denn? Kann mir nicht vorstellen, dass die sich eine eigene Oberfläche schreiben.

      Hier ist der der relevante Teil der phpmyadmin config:

      /**
       * Language and charset conversion settings
       */
      // Default language to use, if not browser-defined or user-defined
      $cfg['DefaultLang'] = 'en-iso-8859-1';

      // Force: always use this language - must be defined in
      //        libraries/select_lang.lib.php
      // $cfg['Lang']     = 'en-iso-8859-1';

      // Default charset to use for recoding of MySQL queries, does not take
      // any effect when charsets recoding is switched off by
      // $cfg['AllowAnywhereRecoding'] or in language file
      // (see $cfg['AvailableCharsets'] to possible choices, you can add your own)
      $cfg['DefaultCharset'] = 'iso-8859-1';

      // Allow charset recoding of MySQL queries, must be also enabled in language
      // file to make harder using other language files than unicode.
      // Default value is FALSE to avoid problems on servers without the iconv
      // extension and where dl() is not supported
      $cfg['AllowAnywhereRecoding'] = FALSE;

      // You can select here which functions will be used for charset conversion.
      // Possible values are:
      //      auto   - automatically use available one (first is tested iconv, then
      //               recode)
      //      iconv  - use iconv or libiconv functions
      //      recode - use recode_string function
      $cfg['RecodingEngine'] = 'auto';

      // Specify some parameters for iconv used in charset conversion. See iconv
      // documentation for details:
      // http://www.gnu.org/software/libiconv/documentation/libiconv/iconv_open.3.html
      $cfg['IconvExtraParams'] = '';

      // Available charsets for MySQL conversion. currently contains all which could
      // be found in lang/* files and few more.
      // Charsets will be shown in same order as here listed, so if you frequently
      // use some of these move them to the top.
      $cfg['AvailableCharsets'] = array(
          'iso-8859-1',
          'iso-8859-2',
          'iso-8859-3',
          'iso-8859-4',
          'iso-8859-5',
          'iso-8859-6',
          'iso-8859-7',
          'iso-8859-8',
          'iso-8859-9',
          'iso-8859-10',
          'iso-8859-11',
          'iso-8859-12',
          'iso-8859-13',
          'iso-8859-14',
          'iso-8859-15',
          'windows-1250',
          'windows-1251',
          'windows-1252',
          'windows-1256',
          'windows-1257',
          'koi8-r',
          'big5',
          'gb2312',
          'utf-8',
          'utf-7',
          'x-user-defined',
          'euc-jp',
          'ks_c_5601-1987',
          'tis-620',
          'SHIFT_JIS'
      );

      Und wie stellt man die mysql DB komplett auf utf-8 um.

      Gar nicht. Entweder hast du MySQL 4.1 (das gibts bislang nur als Alphaversion, die produktiv einzusetzen ist nicht ratsam), oder du hast eine Version davor - die kann zwar UTF-8-Zeichen speichern, aber sie versteht sie nicht - was den Speichervorgang nicht beeinträchtigt.

      Und was ist dann mit folgendem Artikel ?
      http://climbtothestars.org/archives/2004/07/18/converting-mysql-database-contents-to-utf-8/

      1. Moin,

        Gar nicht. Entweder hast du MySQL 4.1 (das gibts bislang nur als Alphaversion, die produktiv einzusetzen ist nicht ratsam), oder du hast eine Version davor - die kann zwar UTF-8-Zeichen speichern, aber sie versteht sie nicht - was den Speichervorgang nicht beeinträchtigt.

        Und was ist dann mit folgendem Artikel ?
        http://climbtothestars.org/archives/2004/07/18/converting-mysql-database-contents-to-utf-8/

        Wie Sven schon sagte: Du kannst natürlich mit UTF-8 codierte Daten wie jeden Binärbrei behandeln und speichern. Die Designer waren sogar so freundlich dir dabei ein bisschen zur Hand zu gehen indem in UTF-8 eine Bytefolge genau dann ein in einer anderen Bytefolge vorkommt, wenn auch die dadurch dargestellte Zeichenfolge in der anderen Zeichenfolge vorkommt. Suchen und Ersetzen sind also kein Problem. Sortieren IIRC auch nicht. Du kannst dich halt nur nicht darauf verlassen dass die eingebauten Stringfunktionen (Anzahl der Zeichen in einem String berechnen, Teile davon ausschneiden, etc.) korrekt funktionieren.

        --
        Henryk Plötz
        Grüße aus Berlin
        ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
        ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
      2. Moin!

        Hier ist der der relevante Teil der phpmyadmin config:

        Da sind etliche Zeichensatzangaben mit ISO-8859-1. Die solltest du mindestens schonmal durch "UTF-8" ersetzen.

        Wichtig ist eines: PHPMyAdmin muß UTF-8-codierte Formulare erhalten (und darf dann daran auch nichts mehr rumcodieren, sondern soll die Texte 1:1 in die DB schieben).

        Deshalb prüfe, welcher Zeichensatz in der Formularseite verwendet wird, in die du deine Texte schreibst. Entscheidend ist:
        1. Die Angabe accept-charset im <form>
        2. Die Angabe content-type - Subangabe "charset" - im HTTP-Header (Browser befragen, Opera und Mozilla zeigen sowas als Seiteninfo an).
        3. Die Meta-Angabe zu content-type im HTML-Quelltext.

        Wenn da irgendwo ISO auftaucht, ist das schlecht. Dein Server kann auch dafür verantwortlich sein.

        Der Browser sucht sich aus den obigen drei Angaben die zum Formularversand zu verwendende heraus. Ist accept-charset angegeben, wird dieser Zeichensatz (meistens - je nach Browser) verwendet, ansonsten der Charset der Seite, wobei die HTTP-Angabe mehr Gewicht hat als die Meta-Angabe in HTML.

        Wenn alle drei Angaben "UTF-8" fordern/angeben, bist du von diesem Aspekt her auf der sicheren Seite. Wenn nicht, ist das dein erster Ansatzpunkt.

        Und was ist dann mit folgendem Artikel ?
        http://climbtothestars.org/archives/2004/07/18/converting-mysql-database-contents-to-utf-8/

        Der beschriebene Fehler ist ursächlich in einer falschen Encoding-Angabe bei der Seitenauslieferung zu suchen. Die Seiten wurden im HTTP-Header als "ISO-8859-1" gekennzeichnet, dementsprechend wurden alle Formulare auch so zurückgeschickt (wenn accept-charset im <form> nicht angegeben wird). Wie ich sicherlich schon ausführlich beschrieben habe, kann das Verhalten der Browser dann absolut nicht eindeutig vorausgesagt werden, es ist alles möglich.

        Mit einer "Umstellung der DB auf UTF-8" hat das absolut nichts zu tun. Es ist eher derselbe Fehler, den du mit deinem PHPMyAdmin hast.

        - Sven Rautenberg

        1. OK,

          das kling alles logisch. Werde das morgen mal versuchen und im Apache config dann auch den default Zeichensatz auf utf-8 setzen.

          Wenn phpmyadmin dann utf-8 schickt sollte die Datenbank auch utf-8 speichern sagst du. Aber inde mysql Doku steht, dass man die Datebank->Tabellen->Spalten separat auf andere zeichensätze umstellen kann. Also eine Spalte iso und die angrenzende auf utf-8.

          Muss ich der DB nicht vorher mitteilen was phpmyadmin ihr schicken wird in dem ich die db umstelle ? Tut mir leid wenn ich scwer von Begriff bin.

          Was hat der Typ denn dann für ein Problem in dem Link, das ich vorhin gepostet habe ? Ich habe es so verstanden. Er meinte die ganze Zeit er hätte UTF-8 gespeichert. Hatte er aber nicht. Nun will er den gesamten Inhalt auf utf umstellen.

          Genau das muss ich doch auch. Der ganze Inhalt bei mir ist nun ISO Western. Soll ich also der Anleitung folgen ?

          Danke

        2. Aber was ist mit den Inhalten die bereits in der DB sind ?
          Die sind doch auf Western Latin.

          Die müssen doch umgewandelt werden. Es soll doch alles umgestellt werden.

          1. Moin!

            Aber was ist mit den Inhalten die bereits in der DB sind ?
            Die sind doch auf Western Latin.

            Du wolltest doch griechisch in die DB tun. Dann können die in der DB enthaltenen Inhalte nicht Western-Latin-codiert sein - weil damit keinerlei Griechisch möglich ist.

            Die müssen doch umgewandelt werden. Es soll doch alles umgestellt werden.

            Ich bin davon ausgegangen, dass du eine leere DB mit den passenden Inhalten füllen willst.

            Falls dem nicht so ist, mußt du dir im Zweifel Konvertierungsprogramme schreiben, die die existierenden Inhalte umsetzen.

            - Sven Rautenberg

            1. Hallo,

              Falls dem nicht so ist, mußt du dir im Zweifel Konvertierungsprogramme schreiben, die die existierenden Inhalte umsetzen.

              Hatte ich das nicht erwähnt? Wenn nicht, bitte ich um Entschuldigung.
              Die Datenbank ist eigentlich voll mit Western Latin.
              Die Frage ist, wie ich das nun konvertieren kann.

              Ich habe es endlich geschafft Unicode in die mySQL Datanbank zu speichern.
              Das war eine sehr schwere Geburt. Ich kopiere griechischen Text aus einem Word Dokument.
              Es wird so ziehmlich alles übernommen, bis auf höhergestellte "registererd"-Zeichen. Also das R im Kreis. Wenn das ausgegeben wird, erscheint auf der Webseite ein schwarzer Kasten mit einem Fragezeichen drin und dahinter das "registered"-Zeichen.Ich glaube, das Problem liegt daran, dass es im Word Dokument höher gestellt ist. Im phpmyadmin Formular ist es dies natürlich nicht. Wird aber wohl mitgespeichert. Ich möchte aber ein einfaches Registered zeichen speichern. Wie kann ich das eingeben ? Bisher habe ich es immer mit Dreamweaver erzeugt und dann in phpmyadmin eingefügt. Erzeugt aber die gleiche Ausgabe? Wie kann man also ein normales Registered Zeichen mittels phpmyadmin speichern ?

              Danke

      3. Hallo Pumuckel,

        Ja aber wie machen die anderen Leute das denn? Kann mir nicht vorstellen, dass die sich eine eigene Oberfläche schreiben.

        wiso nicht? Ist doch nicht schwer. Ich speichere inzwischen mein Forum auch in UTF-8. Muß zwar die ganze Suche jetzt umschreiben, aber das reine Eintragen ist ein Klacks. Forumlare in utf-8 abschicken und dann mit Scriptsprache in die entsprechenden DB-Felder schreiben, fertig.

        Gruß, Meister Eder

        --
        <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
        hier könnte auch ruhig mal'n neues Bild stehen.
        1. Moin,

          wiso nicht? Ist doch nicht schwer. Ich speichere inzwischen mein Forum auch in UTF-8. Muß zwar die ganze Suche jetzt umschreiben, aber das reine Eintragen ist ein Klacks. Forumlare in utf-8 abschicken und dann mit Scriptsprache in die entsprechenden DB-Felder schreiben, fertig.

          Nun bin ich gespannt. Rede! Sprich! Du hast die magische Beschwörungsformel entdeckt, mit der du verschiedene verbreitete Browser zuverlässig dazu bringen kannst Formulardaten UTF-8-kodiert zu versenden?

          Sollten Christians unheilige Flüche zu dem Thema etwa von Erfolg gekrönt worden sein? Sollten die Wikipedianer gar deppert sein, weil sie aus diesem Grund diverse Browser von der Bearbeitung ausschließen?

          --
          Henryk Plötz
          Grüße aus Berlin
          ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
          ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
          1. Hallo Henryk,

            Sollten Christians unheilige Flüche zu dem Thema etwa von Erfolg gekrönt worden sein? Sollten die Wikipedianer gar deppert sein, weil sie aus diesem Grund diverse Browser von der Bearbeitung ausschließen?

            wahrscheinlich keins von beiden, aber das war ja auch hier nicht die Frage. Ich stelle nur fest, daß es bei meinen Tests in Standard-Browsern (IE, Mozilla/firefox, Opera) immerhin mehr Zeichen zuverlässig übrtragen werden als bei ISO-8859-1.

            Gruß, Andreas

            --
            <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
            hier könnte auch ruhig mal'n neues Bild stehen.