zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Mysql Tabelle in UTF-8 Umwandeln

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 25.06.2007, 01:45
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard Mysql Tabelle in UTF-8 Umwandeln

Hi,
ich habe da ein Webseitenprojekt dessen Dokumente ich nun auf UTF-8 Umgestellt habe, das Problem ist nur das einige dieser Dokumente dynamische Inhalte aus einer Mysql Datenbank laden und anzeigen, und da diese Datenbank zuvor auch mit ISO-irgentwas Strings gefüllt wurde und die Dokumente nun aber UTF-8 erwarten habe ich des öfteren anstelle der Richtigen Buchstaben "?" stehen. Nun würde ich die Datenbank, die ja noch alle Informationen enthält gerne so umstellen das sie die Informationen in UTF-8 Umwandelt, oder die ganzen Informationen irgentwie auf UTF-8 Umstellen. Gibt es da irgentwelche Möglichkeiten? An der Datenbank selbst habe ich bisher nichts verändert, interessant für mich ist nur zu sehen das die Tabellen welche z.b. als Latin1_german_cs speichern, die UTF-8 Inputs so speichern das sie wenn sie von den UTF-8 Dokumenten wieder ausgelesen und angezeigt werden, korrekt angezeigt werden, aber in der gleichen Spalte befinden sich noch die ganzen alten Strings die wohl irgentwie nicht auf UTF-8 laufen.

Also ich könnte mir vorstellen das es eine Möglichkeit gibt, das ich die ganze Datenbank exportiere und dann rückimportiere allerdings mit den geänderten Grundeinstellungen, das muss doch irgentwie möglich sein (abgesehen davon alles manuell neu einzugeben)

Geändert von braindead (25.06.2007 um 01:50 Uhr)
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 25.06.2007, 11:00
Benutzerbild von netspy
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 13.08.2004
Ort: Leipzig
Beiträge: 1.953
netspy sorgt für eine eindrucksvolle Atmosphärenetspy sorgt für eine eindrucksvolle Atmosphäre
Standard

Ist ein bischen knifflig, da zu das über temporäre Splaten machen musst.

Converting 4.0 Character Columns to 4.1 Format

Wenn du jetzt aber schon UTF-8 kodierte Daten in deiner Tabelle gespeichert hast, hast du verloren. Den Mischmasch wirst du (sofern du nicht geeignete Suchkriterien hast) schwer auseinanderhalten können.

Mario
__________________
AppDev Blog · AppDev Forum
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 25.06.2007, 11:01
Benutzerbild von netspy
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 13.08.2004
Ort: Leipzig
Beiträge: 1.953
netspy sorgt für eine eindrucksvolle Atmosphärenetspy sorgt für eine eindrucksvolle Atmosphäre
Standard

In diesem Zusammenhang evtl. noch ganz nützlich:

MySQL: Zeichensatz-Grundlagen - Die wunderbare Welt von Isotopp

Mario
__________________
AppDev Blog · AppDev Forum
Mit Zitat antworten
  #4 (permalink)  
Alt 25.06.2007, 12:20
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von netspy Beitrag anzeigen
Ist ein bischen knifflig, da zu das über temporäre Splaten machen musst.

Converting 4.0 Character Columns to 4.1 Format

Wenn du jetzt aber schon UTF-8 kodierte Daten in deiner Tabelle gespeichert hast, hast du verloren. Den Mischmasch wirst du (sofern du nicht geeignete Suchkriterien hast) schwer auseinanderhalten können.

Mario
Naja ich habe 2 ganze Strings neu eingefügt, diese kann ich zur Not auch löschen, solange ich die knapp Tausend strings im alten Format nicht alle neu einfügen muss.
PS:
ich habe auch schon folgendes Versucht:
ich habe mit myphpadmin, testweise eine Tabelle exportiert, in SQL (so das ich direkt SQL befehle erhielt mit denen ich das ganze neu erstellen kann, einmal die Tabelle und noch eine Insert für die Daten), dann habe ich die Tabelle gelöscht, neu angelegt und alles auf utf8_unicode_ci gestellt (danach hab ich das ganze nochmal gemacht nur hab ich alles auf utf8_general_ci gestellt) und dann den Insert den ich bei der Exportation der alten Tabelle erhielt, in einem Editor als UTF-8 abgespeichert und dann direkt über myphpadmin, über die Option SQL Befehle direkt einzugeben, diesen Insert ausgeführt. Hat auch alles geklappt was das einfügen der Daten angeht, nur das Problem ist das sobald diese auf meinen Dokumenten angezeigt werden unteranderem die Umlaute immernoch als ? angezeigt werden, sogar im Quellcode stehen sie so drin.

Geändert von braindead (25.06.2007 um 12:22 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 25.06.2007, 14:34
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard

Ich habe da noch eine wichtige Frage:
Woran erkenne ich das das was ich von der Datenbank erhalte wirklich UTF-8 ist?
Ich habe nämlich gerade festgestellt das wenn ich durch eine Manuelle Umstellung der Zeichenkodierung im Browser meiner UTF-8 Dokumente auf ISO-8859-1 das dann alle ? Aufeinmal durch die korrekten Buchstaben ersetzt werden. Das klingt jetzt erstmal logisch denn die Datenbankinhalte sollten ja noch in diesem Format sein. Nun habe ich aber eine ganze Tabelle gelöscht und neu als UTF-8 Tabelle angelegt und den Inhalt über phpmyadmin wieder imporitert (als SQL) diesen Insert habe ich in einer Textdabei abgespeichert die ich selbst als UTF-8 (ohne BOM sonnst gibts fehler beim Importieren) konvertiert habe. Das habe ich dann Importiert in dem ich die Datei in phpmyadmin angegeben habe und eingestellt habe das es sich um eine UTF-8 Formatierung handelt. Es wurde auch alles Importiert, nur werden die Fragezeichen immer noch angezeigt und wenn ich die Zeichenkonvertierung im Browser manuell umstelle (das geht ja im FF) dann sieht wieder alles ok aus, was sehr verwunderlich ist da die neue Tabelle jetzt ja UTF-8 Kodierte Strings enthalten müsste. Was passiert hier?
Mit Zitat antworten
  #6 (permalink)  
Alt 25.06.2007, 14:51
Benutzerbild von netspy
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 13.08.2004
Ort: Leipzig
Beiträge: 1.953
netspy sorgt für eine eindrucksvolle Atmosphärenetspy sorgt für eine eindrucksvolle Atmosphäre
Standard

Ich kann dir da auch nicht weiterhelfen. Zeichensatzkodierungen bei MySQL sind manchmal eine etwas verzwickte Sache. In MySQL kann man sie an verschiedenen Stellen angeben und da ist es nicht immer ganz einfach das alles richtig einzustellen. Lies dir am besten noch mal meinen zweiten Link durch, da ist vieles ganz gut erklärt. Wenn du mit phpMyAdmin arbeitest achte auch darauf, dass der auf UTF-8 eingestellt ist.

Wenn im Browser UTF-8 eingestellt ist und nur Fragezeichen erscheinen und mit ISO-8859-1 alles richtig aussieht, dann muss das nicht unbedingt an den Daten und der Tabelle selbst liefern. In MySQL kannst du auch festlegen, in welchem Format die Daten geliefert werden. Am besten du schaust hier auch noch mal nach, ob du was findest:

MySQL AB :: MySQL 3.23, 4.0, 4.1 Reference Manual :: 10 Character Set Support


Mario
__________________
AppDev Blog · AppDev Forum
Mit Zitat antworten
  #7 (permalink)  
Alt 25.06.2007, 16:02
Benutzerbild von Lockhead883
<? echo "Hello World"; ?>
XHTMLforum-Mitglied
 
Registriert seit: 01.03.2006
Beiträge: 132
Lockhead883 befindet sich auf einem aufstrebenden Ast
Standard

Meine Startfunktion sieht z.B. immer so aus:
PHP-Code:
    function gsm_init() {
        
ini_set("arg_separator.output","&amp;");
        
session_name('z');
        
session_start();
        
$gsm_db_info = array(
            
'host' => 'meinedomain.tld',
            
'name' => 'meineDatenbank',
            
'user' => 'Benutzername',
            
'pass' => 'Passwort'
        
);
        
$gsm_db_connection mysql_connect($gsm_db_info['host'], $gsm_db_info['user'], $gsm_db_info['pass']);
        
mysql_select_db($gsm_db_info['name'], $gsm_db_connection);
        
mysql_query("SET NAMES 'utf8'");
        
setlocale(LC_ALL'de_DE@euro');
    } 
Die vorletzte Zeile wäre für dich Interessant wobei die anderen Angaben auch nicht zu vernachlässigen sind, speziell die erste Zeile ist recht wichtig für XHTML Seiten.

Wenn du die Funktion so übernehmen willst musst du darauf achten das vor dem deklarieren der Funktion und dem Aufrufen der Funktion noch nicht an den Browser gesendet werden darf!
Mit Zitat antworten
  #8 (permalink)  
Alt 25.06.2007, 18:29
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard

Danke das SET NAMES hat geholfen. Das heißt jetzt also im nachhinein betrachtet, das die Mysql Datenbank die Strings nicht im UFT-8 Format gesendet hat?
Wie sieht das jetzt mit den alten noch unkonvertierten Werten in den Tabellen aus, muss ich die dennoch Konvertieren? Ich habe zur Zeit eine Datenbank drauf die zu 99% aus Tabellen besteht die in Latil1_rigentwas Kollationen gespeicherte Daten haben und ein zwei Daten die erste Hinzugefügt wurde nachdem ich die Webseite auf UTF-8 umgestellt habe (was ich hier schon merkwürdig finde denn es scheint ja so zu sein als würde die Datenbank erkennen das die Daten vom Client in UTF-8 kommen aber zurückgesendet werden sie scheinbar erst seit ich SET NAMES immer in meinem Mysql Klassen Konstruktur auführe lass)
Ich könnte nun folgendes tun:
1. Ein Backup aufspielen in dem die Tabelle noch aus nicht UTF-8 Daten besteht, diese werden ja jetzt scheinbar auch als UTF-8 versendet, was den Nachteil hat das die neuen Daten die per Webseite eingefügt werden als UTF-8 abgelegt werden, ich weiß nicht ob das Problemmatisch ist, ich finde es erlich gesagt etwas zu provisorisch
2. ich könnte müsam die ganze Tabelle über exporte und importe auf UTF-8 Umstellen

was wäre am besten?

EDIT: ich muss einen Teil der Aussagen revidieren, jetzt läuft es umgekehrt schlecht. Die alten Daten in der Datenbank werden nun korrekt angezeigt, nur werden alle die die neu hinzugefügt werden durch diverse Krysptische Zeichen dargestellt wenn sie wieder ausgelesen und angezeigt werden. Aber zumindest nicht mehr als Fragezeichen.

Geändert von braindead (25.06.2007 um 18:54 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 28.06.2007, 12:36
Benutzerbild von Geronimo
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 14.06.2004
Beiträge: 2.641
Geronimo sorgt für eine eindrucksvolle AtmosphäreGeronimo sorgt für eine eindrucksvolle Atmosphäre
Standard

Das mit dem Zeichensatz in MySQL nervt mich tierisch. Ich muss demnächst drei ähnlich aufgebaute Datenbanken zusammenfügen und in UTF-8 konvertieren. Dazu möchte ich - wenn möglich - Access verwenden. Lassen sich die Daten anschließend mit dem Zeichensatz UTF-8 wieder importieren?
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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 aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Programm für SQL-View in Tabelle umwandeln duessu Serveradministration und serverseitige Scripte 0 18.07.2008 10:28
Mysql: Tabelle Ordnen, nach Integer Werten (timestamp) oder Zeitformaten? braindead Serveradministration und serverseitige Scripte 8 14.03.2007 20:21
Tabelle mit Werten aus 2 MySQL DBs mooonshadow Serveradministration und serverseitige Scripte 1 03.01.2007 12:56
Tabelle in DIV umwandeln - Dringend Hilfe gesucht! gnrmarcel CSS 2 12.11.2006 14:00
Tabelle in css-Tabelle umwandeln Tom CSS 2 08.07.2004 14:10


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:13 Uhr.