php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.01.2009, 23:44  
Neuer Benutzer
 
Registriert seit: 03.01.2009
Beiträge: 25
freggeln befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Zeichensatz Problem

Hallo,

ich möchte mit einem kleinem Skript Datensätze aus einer externen Datenbank holen. Problem ist, dass die Tabellen in der externen Datenbank alle als Kollation latin1_swedish_ci eingestellt haben.

Die Zieldatenbank allerdings UTF8 verwendet, was ich persönlich auch bevorzuge.

Naja wie auch immer, wenn ich jedenfalls einen einfachen SELECT auf die Quelldatenbank mache (Bsp.: SELECT POST_TITLE FROM wp_posts where POST_STATUS = "publish" LIMIT 0,10) dann erhalte ich die Sonderzeichen, wie bspw. ä oder é, "defekt".

Kann mir jemand sagen, wie ich den SELECT korrekt aufbaue und die Zeichen in der korrekten Form erhalte?

Eine Suche über Google war leider ergebnislos, denn habe ich eigentlich nur Anleitungen gefunden, wie ich die Tabellen in eine anderen Kollation überführe, was aber für die Quelldatenbank nicht in Frage kommt.

Danke & Gruß
freggeln ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 03.01.2009, 23:54  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Zitat:
Zitat von freggeln
[b]Naja wie auch immer, wenn ich jedenfalls einen einfachen SELECT auf die Quelldatenbank mache (Bsp.: SELECT POST_TITLE FROM wp_posts where POST_STATUS = "publish" LIMIT 0,10) dann erhalte ich die Sonderzeichen, wie bspw. ä oder é, "defekt".
Wie und womit führst Du diese Abfrage aus? Wo und wie werden diese Daten dann falsch ausgegeben?
David ist offline   Mit Zitat antworten
Alt 04.01.2009, 00:02  
Neuer Benutzer
 
Registriert seit: 03.01.2009
Beiträge: 25
freggeln befindet sich auf einem aufstrebenden Ast
Standard

Also im Moment noch ganz einfach. Der folgende Code wird als wird von einem lokalen Webserver geparst.

PHP-Code:
<?php

include_once ('./incl/DB_Access.php');

    
$mysql = new DB_Access;
    
$mysql->connect(DBHOSTDBDBDBUSERDBPASS);
    
$mysql->query('SELECT POST_TITLE FROM wp_posts where POST_STATUS = "publish" LIMIT 0,10');
    while (
$row $mysql->fetchRow()) {
        echo 
$row['POST_TITLE']."<br />";
    }
?>
Als Ergebnis habe ich dann halt Wörter wie Landstraße oder Resumeé, wo eigentlich Landstraße und Resumeé stehen sollten.

Gruß
freggeln ist offline   Mit Zitat antworten
Alt 04.01.2009, 01:06  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Dann wurden in der "latin1_swedish_ci-Tabelle" utf8 Bytefolgen gespeichert und Deine PHP Seite gibt sie als latin1 aus.
Die beiden Zeichen ß entsprechen in latin1 der Bytefolge 0xc3 0x9F. Und das ist nach utf-8 Codierung das Zeichen ß
David ist offline   Mit Zitat antworten
Alt 04.01.2009, 01:56  
Neuer Benutzer
 
Registriert seit: 03.01.2009
Beiträge: 25
freggeln befindet sich auf einem aufstrebenden Ast
Standard

Völlig unstrittig und genau das, was ich auch im ersten Posting dieses Threads geschrieben habe.

Meine Frage ist ja, wie ich das Problem direkt im SELECT Statement korrigieren kann, also die Daten direkt als UTF8 selektieren kann. Oder ist das gar nicht möglich?

Danke & Gruß
freggeln ist offline   Mit Zitat antworten
Alt 04.01.2009, 02:28  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Soll das nur ein einmaliger export(latin1 Server) => import(utf-8 Server) werden?
David ist offline   Mit Zitat antworten
Alt 04.01.2009, 02:35  
Neuer Benutzer
 
Registriert seit: 03.01.2009
Beiträge: 25
freggeln befindet sich auf einem aufstrebenden Ast
Standard

Im Prinzip schon, allerdings wird es vorher ein paar Testläufe geben, also um das Skript zu testen, aber ansonsten wird der Import einmalig werden.

Gruß
freggeln ist offline   Mit Zitat antworten
Alt 04.01.2009, 03:15  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Egal ob Du es mit PHP oder zum Beispiel mysqldump umsetzt, ich würde vorschlagen, Dir die Daten vom Latin1-Server in Latin1 liefern zu lassen und dann dem UTF8-Server diese Daten "unbehandelt" als utf-8 zu übergeben.

Es gibt die Einstellungen character_set_client, character_set_results, character_set_connection. Diese kannst Du "in einem Rutsch" per SET NAMES setzen. Die von PHP verwendete libmysql ist von sich aus auf latin1 eingestellt.
Diese Einstellungen geben an, wie die Daten der Verbindung client<->server codiert sein sollen.
Wenn Du eine Tabelle mit utf-8 Codierung hast und SET NAMES latin1 ist gesetzt, übersetzt der Server die Daten der Tabelle utf8->latin1, bevor sie an den Client gesendet werden.
Wenn Du eine Latin1-Tabelle hast und SET NAMES latin1 ist gesetzt, macht der MySQL Server garnichts mit den Daten. Genau das ist Dir bei Deinem PHP Skript passiert: Du bekommst einfach die Byte-Sequenz als wenn sie latin1 wäre, aber eigentlich sind es utf8 Daten. So weit zum Quell-Server.
Wenn Du jetzt für die Verbindung zum Ziel-Server SET NAMES utf8 angibst und dann die Daten vom Quell-Server unverändert sendest, werden die utf8 Bytesequenzen "richtig" als utf8 interpretiert.

Es gibt einen Nachteil bei dieser Vorgehensweise. Ich weiß nicht, wie Dein DB_ACCESS intern funktioniert, aber mysql_real_escape_string() bekommt die Änderung des charsets über SET NAMES nicht mit. Es wird also weiterhin mit latin1 arbeiten und Zeichen nach diesem charset behandeln. Unter ungünstigen Umständen macht es dabei Quatsch.

Geändert von David (04.01.2009 um 03:20 Uhr).
David ist offline   Mit Zitat antworten
Alt 04.01.2009, 03:16  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

(der Boardbug mit den Doppelposts hat wieder zugeschlagen)
David ist offline   Mit Zitat antworten
Alt 04.01.2009, 15:29  
Neuer Benutzer
 
Registriert seit: 03.01.2009
Beiträge: 25
freggeln befindet sich auf einem aufstrebenden Ast
Standard

Hat genauso geklappt. Vielen Dank für die schnelle Hilfe.

Gruß
freggeln ist offline   Mit Zitat antworten
Antwort


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] Problem: PHP Selbe Datei mehr als 1 Mal soulan PHP Tipps 2008 13 28.11.2008 22:51
Problem Upload mehrere Dateien und schreiben in DB Lapje PHP Tipps 2008 1 22.10.2008 13:12
utf8 Problem (Daten aus DB auslesen) go1denboy PHP Tipps 2008 1 23.09.2008 12:19
Problem mit swfobjects R4v3r JavaScript, Ajax und mehr 8 21.09.2008 14:17
[Erledigt] Galerie Problem... coraplanet PHP Tipps 2008 4 06.06.2008 13:42
XML mit PHP erstellen -> Problem mit Zeichensatz madSoul PHP Tipps 2007 11 23.03.2007 12:36
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
Problem mit Zeichensatz (xml,php) HTML, Usability und Barrierefreiheit 6 19.01.2005 14:14
[Erledigt] Problem mit Übergabe einer Klasse in PHP4 PHP-Fortgeschrittene 10 08.01.2005 21:00
Problem mit Weiterleitung PHP Tipps 2004-2 16 22.12.2004 17:49
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
riesen problem mit zeichensatz. bitte hilfe PHP Tipps 2004-2 6 29.11.2004 21:53
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:06 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