MySQL 4.1: UTF8 Zeichensatz
Twilo
- datenbank
Hallo,
ich verwende ausschließlich UTF8 als Zeichensatz
unter MySQL 4.0 konnte ich über mein Formular und über phpMyAdmin (auf UTF8 eingestellt) ohne Probleme Daten in UTF8 eingeben und anschließend wieder in UTF8 ausgeben
nun ist die Datenbank MySQL 4.1
wenn ich jetzt Daten über mein Formular oder über phpMyAdmin eingebe und anschließend wieder ausgeben lasse, habe ich das Problem, das die Zeichen nicht als UTF8 zurückgegeben werden
Größe kommt als Größe zurück anstatt Größe
muss ich jetzt per php utf8_encode drüber laufen lassen?
was mir eiegtnlich überhaupt nicht gefällt, da utf8_encode nur "ISO-8859-1 string to UTF-8" konvertieren soll
oder habe ich nur etwas übersehen?
als Kollation wird utf8_general_ci verwendet
mfg
Twilo
Hallo,
wenn ich Daten über emin Formular angebe, werden sie vernünftig ausgegeben
in der Datenbank steht Größe dann so "Größe"
wenn ich per phpMyAdmin das Wort "Größe" eintrage, wird "Größe" eingetragen
wie bekomme ich es hin, dass in der Datenbank Größe angezeigt wird, jedoch die UTF8 Zeichen zurückgegeben werden?
es soll per phpMyAdmin und über mein Formular möglich sein Daten in der Dsatenbank einzutragen
mfg
Twilo
hi,
in der Datenbank steht Größe dann so "Größe"
wenn ich per phpMyAdmin das Wort "Größe" eintrage, wird "Größe" eingetragen
Hast du auf der Startseite des PMA auch utf-8 ausgewähhlt ...?
gruß,
wahsaga
Hallo,
in der Datenbank steht Größe dann so "Größe"
wenn ich per phpMyAdmin das Wort "Größe" eintrage, wird "Größe" eingetragen
Hast du auf der Startseite des PMA auch utf-8 ausgewähhlt ...?
seit der Umstellung von MySQL 4.0 auf MySQL 4.1 gibt es dort nur noch "Deutsch - German" vorher gab es "Deutsch - German (iso-8859-1)", "Deutsch - German (iso-8859-15)" und "Deutsch - German (utf-8)"
Opera sagt mir folgendes, wenn ich phpMyAdmin verwende
Kodierung vom Server (von Opera verwendet): UTF-8 (utf-8)
mfg
Twilo
echo $begrüßung;
in der Datenbank steht Größe dann so "Größe"
Nach welcher Kodierung versucht das anzeigende Programm diese Daten darzustellen?
Es ist schon wichtig zu wissen, ob du dir UTF-8-Daten anzeigen lässt und dabei das anzeigende Programm die Bytes als ISO-8859-1 interpretiert oder wie auch immer.
Oder anders gefragt: Entsprechen die Byte-Werte der Daten der von die gewünschten Kodierung?
Natürlich kann es beim Versuch diese Frage zu beantworten zu "Messfehlern" kommen, wenn es aufgrund einer fehlerhaften Auslesemethode zu Datenverfälschung kommt.
wenn ich per phpMyAdmin das Wort "Größe" eintrage, wird "Größe" eingetragen
phpMyAdmin macht normalerweise keine Fehler beim Kommunizieren mit einem MySQL-4.1-Server. Es weiß, wie es die Verbindung zu konfigurieren hat, dass da kein Datenverlust auftritt.
wie bekomme ich es hin, dass in der Datenbank Größe angezeigt wird, jedoch die UTF8 Zeichen zurückgegeben werden?
Du kennst das umfangreiche Kapitel zum Character Set Support unter MySQL 4.1 und höher, und weißt damit, dass an diversen Stellen eingestellt werden kann, welche Zeichenkodierung beim Interpretieren der Daten zu verwenden ist? Insbesondere interessiert hier die Einstellung der (Stringtyp-)Felder (Column Character Set) und die Einstellung der Verbindung zum Client (Connection Character Sets).
es soll per phpMyAdmin und über mein Formular möglich sein Daten in der Datenbank einzutragen
phpMyAdmin, wie gesagt, sollte alles richtig hinbekommen. (Für Fehler, die an anderer Stelle passieren kann phpMyAdmin nichts.) Für Client-Verbindungen ist es sinnvoll, generell nach dem Connect mit SET NAMES die zu verwendende Kodierung dem Server mitzuteilen (besonders, wenn diese nicht mit dem Defaultwert des Servers für Client-Verbindungen (character_set_connection, character_set_client und character_set_results) übereinstimmt).
echo "$verabschiedung $name";
Hallo,
ich verwende das PEAR Package MDB2, dort habe ich folgenden Code eingefügt
$mdb2->setCharset('utf8');
wenn ich jetzt Daten über mein Formular hinzufüge, wird Größe jetzt richtig eingetragen, jedoch habe ich noch Probleme beim Auslesen, da wird immer noch Größe statt Größe zurückgegeben, deshalb erhalte ich bei der Ausgabe nur Kästchen
an was könnte das liegen?
mfg
Twilo
Hallo Twilo,
wenn ich jetzt Daten über mein Formular hinzufüge, wird Größe jetzt richtig eingetragen, jedoch habe ich noch Probleme beim Auslesen, da wird immer noch Größe statt Größe zurückgegeben, deshalb erhalte ich bei der Ausgabe nur Kästchen
an was könnte das liegen?
An Deinem Code :-)
Laut Charta ist Hellsehen können keine Voraussetzung für ein Posting im Forum.
Freundliche Grüße
Vinzenz
Hallo,
hier mal etwas Code :-)
// require the MDB2
require_once('MDB2.php');
$dsn = array();
$dsn['username'] = _DBUSER;
$dsn['password'] = _DBPASS;
$dsn['hostspec'] = _DBHOST;
$dsn['phptype'] = 'mysql';
$dsn['database'] = _DBDB;
#$dsn['charset'] = 'utf8_general_ci';
$options = array(
# 'charset' => 'utf8_general_ci',
'debug' => 2,
'portability' => MDB2_PORTABILITY_ALL,
);
$mdb2 =& MDB2::factory($dsn, $options);
if(PEAR::isError($mdb2)) _error($mdb2, __FILE__, __LINE__, './', 'Verbindung zur Datenbank ist fehlgeschlagen!');
$mdb2->setCharset('utf8');
$mdb2->setFetchMode(MDB2_FETCHMODE_ASSOC);
// Größen abrufen
$sql = sprintf('SELECT `_groesse_id` , `_bezeichnung` FROM `%s` WHERE `_aktiv_status_id` =1', _DBTAB.'groesse');
$groessen =& $mdb2->queryAll($sql);
if(PEAR::isError($groessen)) _error($groessen, __FILE__, __LINE__, './', 'Die Größen konnten nicht abgerufen werden.');
$smarty->assign('groessen', $groessen);
$smarty->display('acp_produkt_option_list.htm');
danach lasse ich es ganz normal mit Smarty ausgeben
<!--{foreach name=groessen from=$groessen item=groesse}-->
<input type="checkbox" name="farben[<!--{$groesse._groesse_id}-->]" value="1"> <a href="./produkt_option_edit.php?id=<!--{$groesse._groesse_id}-->&was=groesse"><!--{$groesse._bezeichnung}--></a><!--{if $smarty.foreach.groessen.last != true}--><br /><!--{/if}-->
<!--{/foreach}-->
die Delemiter sind <!--{ und }-->
mfg
Twilo
echo $begrüßung;
hier mal etwas Code :-)
Sieht characterset-mäßig in Ordnung aus. Eine Anmerkung:
# 'charset' => 'utf8_general_ci',
Der Teil "general_ci" ist die Kollationsangabe (Sortierung) für eine Datenübertragung von und zum Client ist diese nicht relevant. Dieser Wert wird nur intern beim Erzeugen der Ergebnismenge aus den Feldeigenschaften gelesen und gegebenenfalls angewendet. Für die SET NAMES-Einstellung oder deren Äquivalent in DB-Layern ist nur die Zeichensatzangabe (hier: utf8) relevant.
Beim eigentlichen Problem vermute ich einen Fehler, der bereits im Vorfeld eingetreten ist. Sind die Zeichensatzangaben der betroffenen Feldern richtig eingestellt? Zeigt phpMyAdmin alles richtig an? Hast du mal einen Datensatz eingefügt und dabei den Code verwendet, wie es deine Abfrage tut (selbstverständlich mit einem INSERT statt eines SELECTs)?
echo "$verabschiedung $name";
Hallo,
Beim eigentlichen Problem vermute ich einen Fehler, der bereits im Vorfeld eingetreten ist. Sind die Zeichensatzangaben der betroffenen Feldern richtig eingestellt? Zeigt phpMyAdmin alles richtig an?
in phpMyAdmin wird alles richtig angezeigt, also die Umlaute sind normal lesbar und nicht in UTF8 kodiert
Hast du mal einen Datensatz eingefügt und dabei den Code verwendet, wie es deine Abfrage tut (selbstverständlich mit einem INSERT statt eines SELECTs)?
wenn ich mit Insert ein Datensatz hinzufüge, wird dieser richtig eingetragen, beim Auslesen habe ich dann das problem, dass z.B. Größe nicht in UTF8 umgewandelt wird, deshalb erhalte ich nur Kästchen
nehme ich die Zeile
$mdb2->setCharset('utf8');
raus, werden die Datensätze in UTF8 schreibweise eingetragen, beim Auslesen erhalte ich dann jedoch die richtigen Zeichen
bei mir klappt im Moment nur das Auslesen nicht richtig, muss man da vielleicht noch irgendetwas beachten?
mfg
Twilo
echo $begrüßung;
$mdb2->setCharset('utf8');
bei mir klappt im Moment nur das Auslesen nicht richtig, muss man da vielleicht noch irgendetwas beachten?
Als ich mir gerade die Quellen der mysql/mysqli-Treiber ansah, konnte ich nur ein
SET character_set_client = ...
finden. Dies, zusammen mit den von dir angegebenen Indizien, deuten meiner Meinung nach darauf hin, dass MDB2 hier Nachholebedarf hat, da es character_set_results ignoriert. Ich habe noch keine Erfahrungen mit MDB2 gesammelt, so dass ich hier erst einmal nicht weiter helfen kann.
Versuch doch mal, direkt nach dem Connect explizit ein "SET NAMES utf8" an den Server zu senden.
echo "$verabschiedung $name";
Hallo,
Versuch doch mal, direkt nach dem Connect explizit ein "SET NAMES utf8" an den Server zu senden.
ein
$return =& $mdb2->query('SET NAMES utf8');
hat Wunder bewirkt
muss man folgende Zeile trotzdem verwenden?
$return =& $mdb2->setCharset('utf8');
wenn ich diese Zeile auskommentiere, funktioniert es genauso...
irgendwie hat die Zeile keine bewandnis, wenn man vorher die andere Zeile abschickt
mfg
Twilo
echo $begrüßung;
ein
$return =& $mdb2->query('SET NAMES utf8');
hat Wunder bewirkt
muss man folgende Zeile trotzdem verwenden?
$return =& $mdb2->setCharset('utf8');
wenn ich diese Zeile auskommentiere, funktioniert es genauso...
irgendwie hat die Zeile keine bewandnis, wenn man vorher die andere Zeile abschickt
Wenn ich, wie gesagt, den Teil im MDB2-Quelltext richtig verstanden habe, macht setCharset nur ein Drittel von SET NAMES und stellt damit eine (unzureichende) Teilmenge davon dar.
echo "$verabschiedung $name";