php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.06.2008, 20:27  
Benutzer
 
Registriert seit: 24.05.2008
Beiträge: 37
b_i_g_b_o befindet sich auf einem aufstrebenden Ast
Standard [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: 49;Ž 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 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 07.06.2008, 20:30  
Erfahrener Benutzer
 
Registriert seit: 07.06.2008
Beiträge: 992
PHP-Kenntnisse:
Fortgeschritten
Frank befindet sich auf einem aufstrebenden Ast
Frank eine Nachricht über ICQ schicken Frank eine Nachricht über MSN schicken Frank eine Nachricht über Yahoo! schicken
Standard

lass mysql_query('SET NAMES "utf8";'); weg und nimm statt mysql_query('SET CHARACTER SET utf8;'); das hier: PHP: mysql_set_charset - Manual

außerdem schau dir mal die PHP: Multibyte String Funktionen - Manual an
__________________
Frank ist offline  
Alt 07.06.2008, 20:35  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Gib mal das Charset auch bei LOAD DATA mit an.

Zitat:
Zitat von http://dev.mysql.com/doc/refman/5.0/en/load-data.html
12.2.5. LOAD DATA INFILE Syntax

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[CHARACTER SET charset_name]
[FIELDS
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_name_or_user_var,...)]
[SET col_name = expr,...]
Zitat:
The character set indicated by the character_set_database system variable is used to interpret the information in the file. SET NAMES and the setting of character_set_client do not affect interpretation of input. If the contents of the input file use a character set that differs from the default, it is usually preferable to specify the character set of the file by using the CHARACTER SET clause, which is available as of MySQL 5.1.17.

Geändert von David (07.06.2008 um 20:37 Uhr).
David ist offline  
Alt 07.06.2008, 21:16  
Benutzer
 
Registriert seit: 24.05.2008
Beiträge: 37
b_i_g_b_o befindet sich auf einem aufstrebenden Ast
Standard

Hmm, Frank und David, vielen Dank erstmal fuer Eure Blitzantwort.
Ich hab beides eingebaut:

PHP-Code:
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Hello!</title>
</head>
<body>

<?php

$link 
mysql_connect("localhost""root""xxxxx")
or die(
"Keine Verbindung möglich: " mysql_error());
echo 
"Verbindung zum Datenbankserver erfolgreich";
mysql_select_db("aks_liga_results") or die("Auswahl der Datenbank fehlgeschlagen");

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

 
if (function_exists('mysql_set_charset') === false) {
     
/**
      * Sets the client character set.
      *
      * Note: This function requires MySQL 5.0.7 or later.
      *
      * @see http://www.php.net/mysql-set-charset
      * @param string $charset A valid character set name
      * @param resource $link_identifier The MySQL connection
      * @return TRUE on success or FALSE on failure
      */
     
function mysql_set_charset($charset$link null)
     {
         if (
$link == null) {
             return 
mysql_query('SET NAMES "UTF8"');
         } else {
             return 
mysql_query('SET NAMES "UTF8"'$link);
         }
     }
 }

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

    
//tabelle ausgeben
    
$abfrage "SELECT result_id, surname, name FROM liga_results order by result_id desc";
    
$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>
Ergebnis ist leider das gleiche.

Komisch ist auch, dass wenn ich mit PHPMYADMIN direkt die Tabellenwerte ändere und dann wieder auslese, wird alles korrekt angezeigt. Nur das Importieren funktioniert irgendwie nicht. Zumindest akzeptiert die Datanbanktabelle diese speziellen Buchstaben, ist ja schonmal was.

Ich steh uebrigens schon seit drei Tagen hiermit auf dem Schlauch und hab' Foren durchgestoebert und Tutorials gelesen.... kein Erfolg.

Habt ihr vielleicht noch ne Idee?

Danke vielmals.

Bodo
b_i_g_b_o ist offline  
Alt 07.06.2008, 21:44  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

PHP-Code:
<?php
$link 
mysql_connect("localhost""root""xxxxx")
or die(
"Keine Verbindung möglich: " mysql_error());
echo 
"Verbindung zum Datenbankserver erfolgreich";
mysql_select_db("aks_liga_results"$link) or die("Auswahl der Datenbank fehlgeschlagen");

$sql "SHOW Variables LIKE '%character%'";
$result mysql_query($sql$link) or die(mysql_error());
while(
$row=mysql_fetch_array($resultMYSQL_NUM))
{
  echo 
$row[0].'='.$row[1]."<br />\n";
}
$sql 'SELECT Version(), @@character_set_database';
$result mysql_query($sql$link) or die(mysql_error());
while(
$row=mysql_fetch_array($resultMYSQL_NUM))
{
  echo 
$row[0].', '.$row[1]."<br />\n";
}
echo 
'.';
Was wird ausgegeben?
David ist offline  
Alt 07.06.2008, 21:56  
Moderator
 
Registriert seit: 06.06.2008
Beiträge: 4.945
PHP-Kenntnisse:
Fortgeschritten
Wolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer Anblick
Wolla eine Nachricht über ICQ schicken
Standard

Ich hatte eine ähnliche Aufgabenstellung mit polnischen Daten.

Probier mal sofort nach dem Verbinden zur Datenbank das hier:
PHP-Code:
mysql_query("SET NAMES 'utf8'"); 
zusätzlich hab ich am Anfang des Importscriptes noch
PHP-Code:
header("Content-Type: text/html; charset=UTF-8"); 
, bin mir aber nicht sicher, ob das nur ein Überbleibsel eines der vielen erfolglosen Versuche ist.

hth
Wolla


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.

Geändert von Wolla (07.06.2008 um 22:01 Uhr). Grund: nachtrag
Wolla ist offline  
Alt 07.06.2008, 21:58  
Benutzer
 
Registriert seit: 24.05.2008
Beiträge: 37
b_i_g_b_o befindet sich auf einem aufstrebenden Ast
Standard

Die Ausgabe:

Verbindung zum Datenbankserver erfolgreichcharacter_set_client=latin1
character_set_connection=latin1
character_set_database=utf8
character_set_filesystem=binary
character_set_results=latin1
character_set_server=latin1
character_set_system=utf8
character_sets_dir=C:\Programme\MySQL\MySQL Server 5.0\share\charsets\
5.0.51b-community-nt, utf8


Hmmm wo kommt denn da der latin1 her?
b_i_g_b_o ist offline  
Alt 07.06.2008, 22:07  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Du meinst bei character_set_client und character_set_connection?
Das ist die Standardeinstellung der verwendeten libmysql.dll. Das würde mit SET NAMES geändert werden, hat aber laut Doku keinen Einfluss aus LOAD DATA INFILE. Wichtig ist der Wert character_set_database=utf8.
Nebenbei: Die Angabe von CHARACTER SET hat keine Wirkung, wegen
Zitat:
it is usually preferable to specify the character set of the file by using the CHARACTER SET clause, which is available as of MySQL 5.1.17
Du benutzt 5.0.51b.
Erstmal noch ein weiterer Test - nur zur Sicherheit.
PHP-Code:
<?php
$c 
file_get_contents('c:/www/test/liga_results_test_2.csv');
// 30.Buchstabe(groß) im kroatischen Alphabet, [url=http://en.wikipedia.org/wiki/%C5%BD]Ž - Wikipedia, the free encyclopedia[/url] 
$Z chr(0xC5) . chr(0xBD);
var_dump(strlen($c), strpos($c$Z));
David ist offline  
Alt 07.06.2008, 22:21  
Benutzer
 
Registriert seit: 24.05.2008
Beiträge: 37
b_i_g_b_o befindet sich auf einem aufstrebenden Ast
Standard

David, das Ergebnis:

int(443) bool(false)


Ergaenzung:
Nur zur Info, ich benutze zum Programmieren eine Apache/MySQL/PHP-Umgebung bei mir auf dem PC (MYSQL 5.051b ist also auf meinem PC installiert). Und bei meinem Hoster, wo der ganze Kram spaeter funktionieren soll, ist die Version 5.0.45 installiert

Dort gibts folgende Ausgabe auf dein Script:

Verbindung zum Datenbankserver erfolgreichcharacter_set_client=latin1
character_set_connection=latin1
character_set_database=utf8
character_set_filesystem=binary
character_set_results=latin1
character_set_server=latin1
character_set_system=utf8
character_sets_dir=/usr/share/mysql/charsets/
5.0.45, utf8

Geändert von b_i_g_b_o (07.06.2008 um 22:28 Uhr). Grund: Ergaenzung
b_i_g_b_o ist offline  
Alt 07.06.2008, 22:26  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

In der Datei steht zwar etwas, aber kein utf-8 codiertes Ž
David ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Anmeldemaske mit Weiterleitung groovemachine Datenbanken 70 04.07.2008 10:48
[Erledigt] Große Fotos online skalieren stinger133 PHP Tipps 2008 52 04.07.2008 08:18
[Erledigt] Galerie - Bilder nebeneinander Problem noOx PHP Tipps 2008 14 03.07.2008 23:48
[Erledigt] Wer hat einen Tipp für eine Community-Lösung Wolla Scriptbörse 6 03.07.2008 11:26
[Erledigt] Permalink KokosDesign PHP-Fortgeschrittene 4 01.07.2008 20:19
[Erledigt] Hochgeladene Datei wird doppelt abgelegt thecracked PHP Tipps 2008 3 01.07.2008 16:31
[Erledigt] Modul Installer (ordner anlegen, entpacken - egal ob Safe Mode ON/OFF!) Nightuser Scriptbörse 6 01.07.2008 13:30
[Erledigt] Falsche Anzahl der Datensätze wird ausgegeben noOx PHP Tipps 2008 10 30.06.2008 16:54
[Erledigt] Text-Datei Zeile Löschen ! 7Style PHP Tipps 2008 6 30.06.2008 12:30
[Erledigt] array mySQL Fellkneul Datenbanken 4 29.06.2008 13:03
[Erledigt] 'upload-Datei' Zeile für Zeile auslesen Felix PHP Tipps 2008 18 29.06.2008 02:55
[Erledigt] zufälliges Auslesen aus Datenbank aber nur einmal am Tag Nana_chan PHP Tipps 2008 3 27.06.2008 15:23
[Erledigt] preg_match_all und wiederholte Gruppierungen PHP Tipps 2006 4 19.03.2006 15:59
Zahlenkette (Alphabet) duderino PHP Tipps 2005 14 09.04.2005 01:52

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
das kroatische alphabet, kroatisches alphabet html, kroatische alphabet, load data local infile falsche werte, kroatisches alphabet, kroatisch 1 2 5.0, kroatisches alphabet wikipedia, kroatsche alphabet, ivan alphabet set, alphabet doc kroatisch, csv datei kroatisch alphabet, mysql php kroatisch, kroatische alphabet mit wortlaut

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:05 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum