Moin,
bitte nicht hauen, auch wenn ich bestimmt die 1000ste Anfrage wegen des leidigen Umlaut Problems zwischen Php und MySSQL stelle.
Nach 2 Tagen Internet-Recherche und nur immer wieder Verschlimmbesserungen meiner Datenbank (die nämlich inzwischen nur noch ein Mischmasch zwischen richtig und als gespeicherten Umlauten darstellt) erhoffe ich mir Hilfe aus dem Forum.
Aber zur Sache, was ist los, bzw. was habe ich alles versucht:
1. Der Datenbank-Server
Server Version: 5.5.52-0+deb7u1-log - (Debian)
Server Zeichensatz: UTF-8 Unicode ( utf8 )
2. Die Datenbank
Zeichensatz/Kollation der MySQL-Verbindung: utf8_general_ci
3. Die Tabellen in der Datenbank
artikelnummern1 10 MyISAM utf8_general_ci 2.2 KiB -
artikelnummern2 8 MyISAM utf8_general_ci 2.4 KiB 100B
artikelnummern3 0 MyISAM utf8_general_ci 1 KiB -
...
7 Tabellen Gesamt 2,748 MyISAM utf8_general_ci 280.7 KiB 220 B
Nach dem Import eines CSV-Files sah auch alles prima aus. Mit phpMyAdmin in die Tabellen geschaut und alle Umlaute waren da!
Die Ausgabe über PHP hat aber nicht funktioniert. Die Umlaute wurde natürlich als Sonderzeichen ausgegeben.
So, jetzt PHP
1. Hier setze ich erst mal den PHP-Header - als 2. Zeile, direkt nach Session-Start;
<?php
session_start();
header("Content-Type: text/html; charset=utf-8");
?>
2. VOR dem ersten Query zünde ich ein wahres Feuerwerk von MySQL-EInstellungen (Eine Sammlung von allem was ich in letzter Zeit gefunden habe, nach dem Motto viel hilft viel.):
mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'") or die(mysql_error());
$strQuery = "SET character_set_results = 'utf8',
character_set_client = 'utf8',
character_set_connection = 'utf8',
character_set_database = 'utf8',
character_set_server = 'utf8'";
mysql_query($strQuery);
$names = mysql_query('set names utf8');
Und tatsächlich: Jetzt werden die Daten nach dem Auslesen richtig angezeigt!
ABER: Schaut man sich über PHP neu angelegte Daten in der DB an, dann sind hier wieder Sonderzeichen statt Umlauten gespeichert worden. Auch die PHP-Ausgabe ist dann wieder falsch.
Abfragen in denen Umlaute vorkommen hauen natürlich auch nicht hin. "Müller" z.Bsp. wird nie gefunden.
Achja noch was:
Auszug aus phpinfo():
default_charset UTF-8 UTF-8
und natürlich werden alle Dateien mit UTF-8 und ohne BOM abgespeichert (Dreamweaver-Standard-Einstelllung).
Die Umwandlung mit utf8_encode() funktioniert übrigens auch- allerdings auch mit dem hässlichen Effekt dass nur Müll-Sonderzeichen in die DB zurück geschrieben werden
Hat jemand Tipps was ich noch versuchen kann?
Danke schon mal und viele Grüße
Carsten
bitte nicht hauen, auch wenn ich bestimmt die 1000ste Anfrage wegen des leidigen Umlaut Problems zwischen Php und MySSQL stelle.
Nach 2 Tagen Internet-Recherche und nur immer wieder Verschlimmbesserungen meiner Datenbank (die nämlich inzwischen nur noch ein Mischmasch zwischen richtig und als gespeicherten Umlauten darstellt) erhoffe ich mir Hilfe aus dem Forum.
Aber zur Sache, was ist los, bzw. was habe ich alles versucht:
1. Der Datenbank-Server
Server Version: 5.5.52-0+deb7u1-log - (Debian)
Server Zeichensatz: UTF-8 Unicode ( utf8 )
2. Die Datenbank
Zeichensatz/Kollation der MySQL-Verbindung: utf8_general_ci
3. Die Tabellen in der Datenbank
artikelnummern1 10 MyISAM utf8_general_ci 2.2 KiB -
artikelnummern2 8 MyISAM utf8_general_ci 2.4 KiB 100B
artikelnummern3 0 MyISAM utf8_general_ci 1 KiB -
...
7 Tabellen Gesamt 2,748 MyISAM utf8_general_ci 280.7 KiB 220 B
Nach dem Import eines CSV-Files sah auch alles prima aus. Mit phpMyAdmin in die Tabellen geschaut und alle Umlaute waren da!
Die Ausgabe über PHP hat aber nicht funktioniert. Die Umlaute wurde natürlich als Sonderzeichen ausgegeben.
So, jetzt PHP
1. Hier setze ich erst mal den PHP-Header - als 2. Zeile, direkt nach Session-Start;
<?php
session_start();
header("Content-Type: text/html; charset=utf-8");
?>
2. VOR dem ersten Query zünde ich ein wahres Feuerwerk von MySQL-EInstellungen (Eine Sammlung von allem was ich in letzter Zeit gefunden habe, nach dem Motto viel hilft viel.):
mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'") or die(mysql_error());
$strQuery = "SET character_set_results = 'utf8',
character_set_client = 'utf8',
character_set_connection = 'utf8',
character_set_database = 'utf8',
character_set_server = 'utf8'";
mysql_query($strQuery);
$names = mysql_query('set names utf8');
Und tatsächlich: Jetzt werden die Daten nach dem Auslesen richtig angezeigt!
ABER: Schaut man sich über PHP neu angelegte Daten in der DB an, dann sind hier wieder Sonderzeichen statt Umlauten gespeichert worden. Auch die PHP-Ausgabe ist dann wieder falsch.
Abfragen in denen Umlaute vorkommen hauen natürlich auch nicht hin. "Müller" z.Bsp. wird nie gefunden.
Achja noch was:
Auszug aus phpinfo():
default_charset UTF-8 UTF-8
und natürlich werden alle Dateien mit UTF-8 und ohne BOM abgespeichert (Dreamweaver-Standard-Einstelllung).
Die Umwandlung mit utf8_encode() funktioniert übrigens auch- allerdings auch mit dem hässlichen Effekt dass nur Müll-Sonderzeichen in die DB zurück geschrieben werden
Hat jemand Tipps was ich noch versuchen kann?
Danke schon mal und viele Grüße
Carsten
Kommentar