SQL Collation Fragen

Gesperrt
masch
Beiträge: 104
Registriert: Do 8. Jan 2009, 10:29
Kontaktdaten:

SQL Collation Fragen

Beitrag von masch » Mo 19. Okt 2009, 11:41

Hallo,

ich hab einige Probleme mit internationalen Zeichensätzen.
Wenn jemand am anderen der Welt zB ins GB schreibt, wird aus dem Eintrag ein unleserliches Kauderwelsch erzeugt.
In der näheren Analyse bin ich auf den Umstand gestossen mit den Zeichensätzen und der Collation.
Obwohl ich utf8 deklarierte sind einige Einstellungen nicht durch mich änderbar.

bei der Anzeige in myAdmin zeigen sich folgende Einstellungen der DB:
character set client utf8
(Globaler Wert) latin1
character set connection utf8
(Globaler Wert) latin1
character set database latin1
character set filesystem binary
character set results utf8
(Globaler Wert) latin1
character set server latin1
character set system utf8
character sets dir /usr/share/mysql/charsets/
collation connection utf8_unicode_ci
(Globaler Wert) latin1_german2_ci
collation database latin1_german2_ci
collation server latin1_german2_ci


können besonders die dick markierten die Ursache sein?
Auf meine Anfrage hin erhielt ich folgende Aussage vom Provider, die sich mal alles näher angeschaut haben:

Wir gehen davon aus, dass es mit nicht multi-byte festen Funktionen zusammen, die das CMS nutzt. Generell ist in solchen Zeichensatz-Fällen bei der Datenbank darauf zu achten, dass die Datenbank den richtigen Zeichensatz nutzt und die Applikation per 'SET NAMES' den richtigen/ erwarteten Zeichensatz der Datenbank mitteilt. Bitte beachten Sie, dass wir hierfür keinen Support leisten können.

also laut Provider Fehler im Contenido.
Gibt es dafür eine Lösungsmöglichkeit?

yui
Beiträge: 140
Registriert: Di 17. Jun 2003, 17:55
Kontaktdaten:

Re: SQL Collation Fragen

Beitrag von yui » Di 29. Dez 2009, 16:28

Ich scheine das gleiche Problem zu haben und habe hier diesen Artikel gefunden: http://forum.contenido.org/viewtopic.php?t=17309 Bei der Lektüre des Artikel bzw. dessen Umsetzung habe ich ein Verständnisproblem.

In besagter Datei db_mysql.inc habe ich folgendes geschrieben:

Ab Zeile 92

Code: Alles auswählen

 public: connection management */
  function connect($Database = "", $Host = "", $User = "", $Password = "") {

    /* Handle defaults */
    if ("" == $Database)
      $Database = $this->Database;
    if ("" == $Host)
      $Host     = $this->Host;
    if ("" == $User)
		 
      $User     = $this->User;
    if ("" == $Password)
      $Password = $this->Password;
	  
	 /* Das hier ist neu */
	  mysql_query('SET character_set_client = utf8');
mysql_query('SET character_set_results = utf8');
mysql_query('SET character_set_connection = utf8');   
Wenn ich die Frontendseite neu lade werden die Sonderzeichen richtig dargestellt, allerding bekomme ich auch folgende Fehlermeldung, die ich auch mit verschienden Try-and-Error Versuchen nicht beseitigt bekommen:
Warning: mysql_query() [function.mysql-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /htdocs/xxx/conlib/db_mysql.inc on line 99

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /htdocs/xxx/conlib/db_mysql.inc on line 99

Warning: mysql_query() [function.mysql-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /htdocs/xxx/conlib/db_mysql.inc on line 100

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /htdocs/xxx/conlib/db_mysql.inc on line 100

Warning: mysql_query() [function.mysql-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /htdocs/xxx/conlib/db_mysql.inc on line 101

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /htdocs/xxx/conlib/db_mysql.inc on line 101

Warning: Cannot modify header information - headers already sent by (output started at /htdocs/xxx/conlib/db_mysql.inc:99) in /htdocs/xxx/ivg/front_content.php on line 244
Weiss jemand Rat?

Danke und schöne Grüsse
yui
Ich weiß, dass ich nichts weiß. Sokrates

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Re: SQL Collation Fragen

Beitrag von Dodger77 » Di 29. Dez 2009, 16:56

An der Stelle passt das nicht so gut, da zu dem Zeitpunkt ja noch keine DB-Verbindung aufgebaut ist. Ich hätte das grundsätzlich eher in der Datei "conlib/local.php" umgesetzt. Einfach hinter:

Code: Alles auswählen

      // TODO check this out
      // HerrB: Checked and disabled. Kills umlauts, if tables are latin1_general.
      
      // try to use the new connection and get the needed encryption
      //$this->query("SET NAMES 'utf8'");
folgendes ergänzen:

Code: Alles auswählen

      $this->query("SET character_set_client = utf8");
      $this->query("SET character_set_results = utf8");
      $this->query("SET character_set_connection = utf8");

Gesperrt