Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Das kroatische Alphabet bringt mich noch um....

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • b_i_g_b_o
    hat ein Thema erstellt [Erledigt] Das kroatische Alphabet bringt mich noch um.....

    [Erledigt] Das kroatische Alphabet bringt mich noch um....

    Sollte eingentlich kein grosses Problem sein, ist aber - zumindest für mich:

    Ich hab hier ne kleine CSV-Datei mit 5 Datensaetzen (also 5 Zeilen) drin mit jeweils 10 Werten. Die will ich gerne in meine kleine MySQL-Datenbank importieren mit Hilfe von PHP:

    1;Puntijarka;1;Lesjak;Goran;9999.12.31;00:29:56;M S;0;62.5835
    2;Puntijarka;2;Žalac;Darko;9999.12.31;00:30:15;M S;0;61.7355
    3;Puntijarka;3;Vrdoljak;Ivan;9999.12.31;00:30:51;M S;0;60.5577
    4;Puntijarka;4;Trivanovic;Relja;9999.12.31;00:31:4 2;M40;0;59.1253
    5;Puntijarka;5;Jurišic;Veronika;9999.12.31;00:31:4 9;Ž S;0;58.5406

    Wie ihr seht, sind da einige spezielle Buchstaben drin.

    Mit dem folgenden Code importieren ich die Daten, was auch ganz gut funktioniert, mit Ausnahme diser speziellen Buchstaben

    PHP-Code:
    <html xmlns="http://www.w3.org/1999/xhtml">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <head>
      <title>Hello!</title>
    </head>
    <body>

    <?php

    $link 
    mysql_connect("localhost""AKS_User""xxxxx")
    or die(
    "Keine Verbindung möglich: " mysql_error());
    echo 
    "Verbindung zum Datenbankserver erfolgreich<br>";
    mysql_select_db("AKS_Liga_Results") or die("Auswahl der Datenbank fehlgeschlagen");

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

    $sql "LOAD DATA INFILE 'c:/www/test/liga_results_test_2.csv' IGNORE INTO TABLE liga_results
    FIELDS TERMINATED BY ';' lines terminated by '\r\n'"
    ;
    $result mysql_query($sql);
    echo 
    mysql_error();
    echo 
    $result;

        
    //tabelle ausgeben
        
    $abfrage "SELECT result_id, surname, name FROM liga_results";
        
    $ergebnis mysql_query($abfrage);
        while(
    $row mysql_fetch_object($ergebnis))
        {
            echo 
    "$row->result_id$row->name$row->surname <br>";
        }

        
    //verbindung beenden
        
    mysql_close($link);

    ?>

    </body>
    </html>
    Zu Testzwecken gebe ich am Ende ein paar Daten aus, da fehlt dann allerdings was: Der spezielle Buchstabe fehlt und der Rest in dem Datenfeld
    (z.B. Statt "5, Veronika, Jurišic" steht da bloß "5, Veronika, Juri"

    Ausgabe auf Bildschirm:
    +++
    Verbindung zum Datenbankserver erfolgreich1
    4, Relja, Trivanovic
    3, Ivan, Vrdoljak
    2, Darko,
    1, Goran, Lesjak
    5, Veronika, Juri
    ++++

    Die VARCHAR-Felder in der Tabelle sind mit utf8_unicode_ci formatiert (ich weiss nicht, ob hier "formatiert" das richtige Wort ist, sorry).

    Was kann ich noch tun?

    Vielen Dank fuer Feedback.

    Bodo

  • b_i_g_b_o
    antwortet
    David, vielen Dank an Dich, letzendlich haben mir die Tips sehr weitergeholfen und die Ausgabe, EIngabe, SPeicherung von speziellen Zeichen klappt nun. Frag mich bitte nichts, warum es sooo lange nicht funktioniert hat

    Jetzt geht's jedenfalls.

    Nach 2 Tagen "was anderes machen", hab ich nochmal von 0 angefangen und konsequent ueberall in der MySQL DB "UTF8" genutzt dann noch

    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />

    und

    mysql_query("SET NAMES 'utf8'");

    verwendet.

    Prima... die Fragen hoeren aber natuerlich nicht auf

    Einen Kommentar schreiben:


  • David
    antwortet
    Zitat von b_i_g_b_o Beitrag anzeigen
    Incorrect integer value: '1' for column 'result_id' at row 1 in C:\www\test\rundumtest.php on line 30
    Mein Skript hat übrigens nur 27 Zeilen, deshalb verwirrt mich die Fehlermeldung sehr.

    Einen Kommentar schreiben:


  • David
    antwortet
    Zitat von b_i_g_b_o Beitrag anzeigen
    Wenn ich die "nicht nach UTF8 konvertierte" CSV-Datei lade
    Ab da habe ich nicht mehr weiter gelesen.
    Wenn Du mysql sagst "hier kommen die utf8 codierten Daten" und dann kommt was anderes, klappt es nicht.
    "Probieren Sie unser Banana Split"
    "hm, das ist Birne Helene"
    "und was gefällt Ihnen daran nicht?"

    Einen Kommentar schreiben:


  • b_i_g_b_o
    antwortet
    Wenn ich die "nicht nach UTF8 konvertierte" CSV-Datei lade, wird nach deinem Script das ausgegeben:

    ------
    string(35) "c:/www/test/liga_results_test_2.csv" int(443) bool(false) surname:
    strlen(surname): 0
    charset: utf8
    Length: 0

    Warning: Unknown: 1 result set(s) not freed. Use mysql_free_result to free result sets which were requested using mysql_query() in Unknown on line 0
    --------

    Nehme ich die stattdessen die CSV inkl Umwandlung nach UTF8

    -----------
    string(42) "c:/www/test/liga_results_test_2_utf8-2.csv" int(449) int(129)
    Warning: mysql_query() [MySQL :: MySQL Documentation]: Incorrect integer value: '1' for column 'result_id' at row 1 in C:\www\test\rundumtest.php on line 30
    Incorrect integer value: '1' for column 'result_id' at row 1
    -----------

    HMMM??? Ich weiss natuerlich nicht, ob's das ist, was du erwartest hast-

    Es gibt uebrigens noch Neuigkeiten:
    Heute morgen - nach ein paar Stunden Schlaf-Pause - hab ich nochmal etwas ausprobiert: Die nach UTF8 konvertierter CSV-Datei (Name: liga_results_test_2_utf8-2.csv) habe ich direkt ueber PHPMYADMIN importiert, Ergebnis: einwandfrei, alle character werden korrekt in der Datenbank und auch per Ausgabe per HTML-Webseite. Danke.

    Einen Kommentar schreiben:


  • David
    antwortet
    Na dann mal ein Rundumtest
    PHP-Code:
    <?php
    error_reporting
    (E_ALL);
    ini_set('display_errors'1);
    ini_set('mysql.trace_mode'1);

    $link mysql_connect("localhost""AKS_User""xxxxx") or die("Keine Verbindung möglich: " mysql_error());
    mysql_select_db("AKS_Liga_Results"$link) or die(mysql_error());
    mysql_query('SET NAMES "utf8"'$link) or die(mysql_error());
    mysql_query('SET CHARACTER SET utf8'$link) or die(mysql_error());

    $infile 'c:/www/test/liga_results_test_2.csv';
    $c file_get_contents($infile);
    $Z chr(0xC5) . chr(0xBD);
    var_dump($infilestrlen($c), strpos($c$Z));

    $sql 'CREATE TEMPORARY TABLE tmp_liga LIKE liga_results';
    mysql_query($sql$link) or die(mysql_error());
    $sql "LOAD DATA INFILE '$infile' INTO TABLE tmp_liga FIELDS TERMINATED BY ';' lines terminated by '\r\n'";
    mysql_query($sql$link) or die(mysql_error());

    $sql 'SELECT surname, charset(surname) as c, Length(surname) as l FROM tmp_liga WHERE result_id=2';
    $result mysql_query($sql$link) or die(mysql_error());
    $row mysql_fetch_array($result);
    echo 
    'surname: ' $row['surname'] . "<br />\n";
    echo 
    'strlen(surname): ' strlen($row['surname']) . "<br />\n";
    echo 
    'charset: ' $row['c'] . "<br />\n";
    echo 
    'Length: ' $row['l'] . "<br />\n";

    Einen Kommentar schreiben:


  • b_i_g_b_o
    antwortet
    David, leider ja, genau das wollte ich mit dem Satz am Ende meines Kommentars um 23:39 sagen: Trotz nun UTF8-codierter CSV-Datei, passiert das gleiche, MySQL verschluckt sich und schmeisst alles nach und inklusive "Sonderzeichen" weg.



    Bodo


    PS: Vielen Dank uebrigens noch fuer Deine bishrige Hilfe, das ging ja wirklich ratzfatz und sehr ueberlegt voran. Spitze!

    PPS: David, sehr witzig, was ich grad sehe: Du hast Dich hier im Forum genau an meinem 40. registriert!

    Einen Kommentar schreiben:


  • David
    antwortet
    Aus der Frage entnehme ich, dass Dein Probelm immer noch nicht gelöst ist?

    Bisher hattest Du kein utf-8 in der Datei. Kein Wunder, dass sich MySQL dabei verschluckt, wenn es utf-8 condierte Daten erwartet.

    Einen Kommentar schreiben:


  • b_i_g_b_o
    antwortet
    Wolla,

    Zitat von Wolla Beitrag anzeigen
    Nachtrag:
    Ich mache das Importieren durch Zeilenweises Lesen der CSV-Datei, Splitten der Felder am Trennzeichen (, und normalem INSERT INTO tabelle ....
    Das einzig Spezielle sind die o.a. Anweisungen SET NAMES und header.
    Hast du damit das Zeichensatz-Problem geloest oder ist es einfach nur eine andere Methode, Daten aus einer Datei in eine MySQL-Datenbank-tabelle zu schreiben? Hmmm, wie geht das?

    Wie weist du eine Zeile einem Parameter zu?
    Aufsplitten mit explode?

    danke fuer Feedback.

    Bodo

    Einen Kommentar schreiben:


  • David
    antwortet
    Jetzt ist der Inhalt der Datei utf-8 codiert.

    Einen Kommentar schreiben:


  • b_i_g_b_o
    antwortet
    Nun hab ich meine CSV nochmal in einem Texteditor (Ultraedit) geladen und als UTF8 gespeichert. Dann kommt das raus, wenn ich Dein Script drueber laufen lasse:

    32 3B 50 75 6E 74 69 6A 61 72 6B 61 3B 32 30 30 33 3B 32 30 30 33 2E 30 38 2E 32 38 3B 31 30 3B 64 75 67 61 3B 32 3B C5 BD 61 6C 61 63 3B 44 61 72 6B 6F 3B 39 39 39 39 2E 31 32 2E 33 31 3B 30 30 3A 33 30 3A 31 35 3B 4D 20 53 3B 30 3B 36 31 2E 37 33 35 35 0D 0A

    dein zweites Script bringt nun: int(446) int(126)


    Vorher wars uebrigens das:
    32 3B 50 75 6E 74 69 6A 61 72 6B 61 3B 32 30 30 33 3B 32 30 30 33 2E 30 38 2E 32 38 3B 31 30 3B 64 75 67 61 3B 32 3B 8E 61 6C 61 63 3B 44 61 72 6B 6F 3B 39 39 39 39 2E 31 32 2E 33 31 3B 30 30 3A 33 30 3A 31 35 3B 4D 20 53 3B 30 3B 36 31 2E 37 33 35 35 0D 0A


    Das CSV-File mit UTF8-Codierung habe ich dann nochmal mit dem PHP geladen: LEIDER aendert sich nichts, noch immer wird das spezielle Zeichen plus alle nachfolgenden nicht geladen.

    Einen Kommentar schreiben:


  • David
    antwortet
    Das ist die iso-8859-1 Codierung für
    2;Puntijarka;2003;2003.08.28;10;duga;2;Žalac;Darko ;9999.12.31;00:30:15;M S;0;61.7355
    Kein utf-8

    Korrektur: Es ist die Windows-1252 Codierung, nicht iso-8859.

    Einen Kommentar schreiben:


  • b_i_g_b_o
    antwortet
    David, das Ergebnis....

    32 3B 50 75 6E 74 69 6A 61 72 6B 61 3B 32 30 30 33 3B 32 30 30 33 2E 30 38 2E 32 38 3B 31 30 3B 64 75 67 61 3B 32 3B 8E 61 6C 61 63 3B 44 61 72 6B 6F 3B 39 39 39 39 2E 31 32 2E 33 31 3B 30 30 3A 33 30 3A 31 35 3B 4D 20 53 3B 30 3B 36 31 2E 37 33 35 35 0D 0A

    Einen Kommentar schreiben:


  • David
    antwortet
    Das Zeichen kann ja auch anders als utf-8 codiert sein.
    PHP-Code:
    <?php
    foreach(file('c:/www/test/liga_results_test_2.csv') as $r)
    {
      if (
    0===strpos($r'2;'))
      {
        for(
    $i=0$i<strlen($r); $i++)
        {
          
    printf('%02X 'ord($r[$i]));
        }    
      }
    }

    Einen Kommentar schreiben:


  • b_i_g_b_o
    antwortet
    HMMM, wenn ich die CSV oeffne, dann steht da allerdings genau das drin:

    1;Puntijarka;1;Lesjak;Goran;9999.12.31;00:29:56;M S;0;62.5835
    2;Puntijarka;2;Žalac;Darko;9999.12.31;00:30:15;M S;0;61.7355
    3;Puntijarka;3;Vrdoljak;Ivan;9999.12.31;00:30:51;M S;0;60.5577
    4;Puntijarka;4;Trivanovic;Relja;9999.12.31;00:31:4 2;M40;0;59.1253
    5;Puntijarka;5;Jurišic;Veronika;9999.12.31;00:31:4 9;Ž S;0;58.5406

    ...also inkl Ž. Sehr merkwuerdig.

    Einen Kommentar schreiben:

Lädt...
X