Da das zum Thema passt, bleib ich mal hier.
Habe jetzt zum Testen mal etwas für eine Modulausgabe zusammengestrickt:
Code: Alles auswählen
<pre>
<?php
$_sql = new rex_sql();
echo 'PHP-Version: '; echo phpversion(); echo '<br />';
echo 'MySQL-Version: '; echo $_sql->getServerVersion(); echo '<br />';
echo 'mysql_client_encoding: ';
print_r (mysql_client_encoding($_sql->identifier)); echo '<br />';
$_q = 'SHOW VARIABLES LIKE "%character_set%";';
$_qa = $_sql->setQuery($_q);
echo '<b>SHOW VARIABLES LIKE "%character_set%": </b>'; echo '<br />';
$foo = $_sql->getArray();
foreach ($foo as $key => $val) {
echo ' '. $val['Variable_name'] .' => '. $val['Value']; echo '<br />';
}
echo '<br /><b>Setze mysql_set_charset:</b>'; echo '<br />';
mysql_set_charset('utf8', $_sql->identifier);
echo 'mysql_client_encoding: ';
print_r (mysql_client_encoding($_sql->identifier)); echo '<br />';
$_q = 'SHOW VARIABLES LIKE "%character_set%";';
$_qa = $_sql->setQuery($_q);
echo '<b>SHOW VARIABLES LIKE "%character_set%": </b>'; echo '<br />';
$foo = $_sql->getArray();
foreach ($foo as $key => $val) {
echo ' '. $val['Variable_name'] .' => '. $val['Value']; echo '<br />';
}
?>
</pre>
<br /><br />
Die Ergebnisse dieser Abfragen sind etwas verwirrend.
Erster Test:
SET NAMES in rex_sql ist deaktiviert.
Wie zu erwarten war, gibt mir
mysql_client_encoding ein
latin1 zurück. Die meisten der "character_set*" stehen ebenfalls auf
latin1 (was hier soweit ersteinmal OK ist).
Zweiter Test:
SET NAMES in rex_sql ist aktiviert.
mysql_client_encoding liefert wieder ein
latin1.
Die meisten der "character_set*" sind nun auf
utf8 gesetzt (character_set_server ist weiterhin latin1).
Im zweiten Teil des Testscripts wird
mysql_set_charset('utf8'); gesetzt.
Erst danach liefert mir
mysql_client_encoding ein
utf8.
Hier stimmt etwas mit der Rückgabe von mysql_client_encoding nicht?
Oder was übersehe ich?
Edit
Nach weiteren Tests und der Suche nach Antworten mittels Suchmaschine komme ich zu dem Schluß, dass die Funktion mysql_client_encoding bei mir einen falschen Wert zurückliefert. Werde also eine andere Abfrage verwenden müssen und lieber ganz auf diese Funktion verzichten.