Hallo,
danke erstmal für die Antwort.
Was willst du denn hier mit PHP-Code bei einem reinen Datenbank-Problem?
Ich dachte besser zuviel Code als zuwenig ;)
Wofür soll das reichen?
Eigentlich möchte ich erreichen, dass auch für verschiedene Serverkonfigurationen eine Einstellung erreicht wird, die Sonderzeichen fehlerfrei darstellt.
Z.B. soll bei der Installation eines Skriptes latin1 oder utf8 ausgeählt werden können. Gemäß dieser Auswahl soll eben der Charset für die Datenbanktabellen gesetzt werden.
Letzten Endes zählt die Kodierung des einzelnen Feldes. Und die dürfen durchaus innerhalb einer Tabelle verschieden kodiert sein.
Danke für den Hinweis. Aber in meinem Fall reicht eine einheitliche Lösung.
Die Angaben zur Datenbank und zur Tabelle sind nur Default-Angaben, die herangezogen werden, wenn für eine Tabelle oder ein Feld keine explizite Angabe zur Kodierung/Kollation gemacht wurde.
Somit kann ich mir die einzelnen Feldangaben ja sparen, wenn ich zuvor einmal für die ganze Tabelle den Standard (default) angegeben habe, richtig?
Wie gesagt, die Feldkodierung ist ausschlaggebend. Und für den Transport der Daten von und zum Client ist die pro Verbindung auszuhandelnde Kodierung maßgebend. Das wird gern übersehen. Stichwörter: mysql_set_charset() oder auch SET NAMES.
Danke für den Hinweis.
Die Funktion mysql_set_charset() gibt es nicht in allen Versionen. Daher scheint der Weg über SET NAMES kompatibler, richtig?
Ansonsten gibt es folgende Funktion (Quelle: http://de2.php.net/manual/de/function.mysql-set-charset.php):
<?php
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_identifier = null)
{
if ($link_identifier == null) {
return mysql_query('SET NAMES "'.$charset.'"');
} else {
return mysql_query('SET NAMES "'.$charset.'"', $link_identifier);
}
}
}
?>
ist das zu empfehlen? Oder sollte man in jedem Fall mit SET NAMES arbeiten? Kann es den Fall geben, dass in PHP
function_exists('mysql_set_charset')
~~~true zurückgibt, aber MySQL trotzdem einen Fehler produziert, weil die MySQL Version kleiner als 5.0.7 ist? Oder wird diese Funktion nur in PHP Verfügbar, wenn eine entsprechende MySQL Version installiert wurde?
Sind die MySQL Befehle in PHP also abhängig von der installierten PHP oder der installierten MySQL Version?
Ich fange,
wie man vielleicht merkt ;),
gerade erst an, mich mit MySQL zu beschäftigen. Das Quakenettutorial ist u.A. ganz gut und weitere Quellen auch. Diese Frage bezüglich der Charsets finde ich aber nirgendwo (für mich) verständlich und eindeutig erklärt. Vielleicht konstruiere ich auch ein Problem wo keines ist?
Und noch eine Frage, was passiert, wenn für die Verbindung Charset utf8 angegeben wurde, aber die Daten aus einem Formular stammen, das in einem HTML Dokument eingebettet ist, das als Charset latin1 angegeben hat?
Ich vermute, dass in diesem Fall mit Fehlern bei Umlauten und Sonderzeichen zu rechnen ist, richtig?
Ich vermute, der Charset muss dann bei allen involvierten Dokumenten einheitlich sein, richtig?
netten Tag
^da Powl
--
===============================
[powl.hat-gar-keine-homepage.de/](http://powl.hat-gar-keine-homepage.de/)