Hallo,
gestern habe ich auf die Version 3.24 des serendipity_event_freetag Plugins upgedatet und jetzt das (Serendipity 1.6-alpha2 und PHP 5.2.17) beim Anklicken eines Tags - alles spanische Dörfer für mich
Query failed:
SELECT
e.id,
e.title,
e.timestamp,
e.comments,
e.exflag,
e.authorid,
e.trackbacks,
e.isdraft,
e.allow_comments,
e.last_modified,
a.realname AS author,
a.username AS loginname,
a.email
, e.body, e.extended
FROM
serendipity_entries AS e
LEFT JOIN serendipity_authors a
ON e.authorid = a.authorid
LEFT JOIN serendipity_entrycat ec
ON e.id = ec.entryid
LEFT JOIN serendipity_category c
ON ec.categoryid = c.categoryid
INNER JOIN serendipity_entrytags AS entrytags ON (e.id = entrytags.entryid)
WHERE isdraft = 'false' AND e.timestamp <= 1308438000 AND entrytags.tag = 'stuttgart 21' COLLATE utf8_unicode_ci
GROUP BY e.id
ORDER BY timestamp DESC
LIMIT 10
/ COLLATION 'utf8_unicode_ci' is not valid for CHARACTER SET 'latin1'
Hallo,
ich habe das Plugin downgegradet auf 3.20. Hier tritt das Problem nicht auf.
moonchild wrote:Hallo,
gestern habe ich auf die Version 3.24 des serendipity_event_freetag Plugins upgedatet und jetzt das (Serendipity 1.6-alpha2 und PHP 5.2.17) beim Anklicken eines Tags - alles spanische Dörfer für mich
Ein Rückfall auf 3.23 wäre besser. Es liegt nur am letzten Update der Collation einfügte. Dazu gibt es hier irgendwo ein Thread, suche nach COLLATE.
Du könntest deine *_entrytags mysql Tabelle von latin auf utf8_unicode_ci stellen, Damit sollte das auch gehen.
Hallo,
Danke für den Hinweis, die Umstellung der Datenbank hilft auch nicht:
Timbalu wrote:Ein Rückfall auf 3.23 wäre besser. Es liegt nur am letzten Update der Collation einfügte. Dazu gibt es hier irgendwo ein Thread, suche nach COLLATE.
Du könntest deine *_entrytags mysql Tabelle von latin auf utf8_unicode_ci stellen, Damit sollte das auch gehen.
Ich probiere das jetzt mal mit der 3.23, sofern ich die irgendwo auftreibe.
Query failed:
SELECT
e.id,
e.title,
e.timestamp,
e.comments,
e.exflag,
e.authorid,
e.trackbacks,
e.isdraft,
e.allow_comments,
e.last_modified,
a.realname AS author,
a.username AS loginname,
a.email
, e.body, e.extended
FROM
serendipity_entries AS e
LEFT JOIN serendipity_authors a
ON e.authorid = a.authorid
LEFT JOIN serendipity_entrycat ec
ON e.id = ec.entryid
LEFT JOIN serendipity_category c
ON ec.categoryid = c.categoryid
INNER JOIN serendipity_entrytags AS entrytags ON (e.id = entrytags.entryid)
WHERE isdraft = 'false' AND e.timestamp <= 1308480000 AND entrytags.tag = 'stuttgart 21' COLLATE utf8_unicode_ci
GROUP BY e.id
ORDER BY timestamp DESC
LIMIT 10
/ COLLATION 'utf8_unicode_ci' is not valid for CHARACTER SET 'latin1'
Das stand da vorher auch schon und ist genau was ich meinte. Das Charset von Mysql ist auf latin1 gestellt. Da ist die Collation latin1_swedish_ci.
http://me.in-berlin.de/doc/mysql-doc/ma ... arset.html
Um korrekt arbeiten zu können sollte das charset aber auf UTF8 stehen, damit man richtig sortieren kann. Dies gilt allgemein für die gesamte Datenbank von Serendipity; CHARSET utf8 und COLLATION utf8_unicode_ci. Beim nachträglichen Umstellen der DB im Allgemeinen ist etwas Vorsicht und Kenntnis vonnöten, damit auch alles richtig konvertiert wird. Dazu gabs hier auch schon geeignete Threads und fundierte Antworten von Garvin.
ALTER TABLE tbl_name
[DEFAULT CHARACTER SET charset_name] [COLLATE collation_name]
also
ALTER TABLE serendipity_entrytags DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci
Äh, bei mir laute die Fehlermeldung zu Anfang "COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'latin1'", sorry.
Dann habe ich versucht, das auf utf8_unicode_ci umzustellen mit dem Ergebnis, dass die Fehlermeldung bei mir anschließend
"COLLATION 'utf8_unicode_ci' is not valid for CHARACTER SET 'latin1'"
lautete.
Weil ich mit Zeichensätzen und mysql nicht vertraut bin, habe ich als Workaround eine alte Version des Plugins installiert. (Und ehe ich mir die Datenbank verhunze, schmeiße ich lieber das Plugin raus)
ALTER TABLE serendipity_entrytags DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci
In phpymadmin > Datenbank > SQL
Danach in Konfiguration > Datenbankeinstellungen > Datenbank-Zeichensatzkonvertierung aktivieren JA > Speichern.
Getestet und es wurde nichts "zerhauen"
Von dem Nutzen einer älteren Version rate ich ab, da Du dir damit, falls es ein Sicherheitupdate mal gibt, einen geistigen Ignorierpunkt holst und damit eine Sicherheitslücke geöffnet wird.
Gruss
Seraphyn
seraphyn wrote:
Danach in Konfiguration > Datenbankeinstellungen > Datenbank-Zeichensatzkonvertierung aktivieren JA > Speichern.
Äh, damit werden bei mir die Umlaute in allen anderen Tabellen (z. B. den entries) flasch dargestellt. Vermutlich müsste man alle Tabellen konvertieren.
Query failed:
SELECT
e.id,
e.title,
e.timestamp,
e.comments,
e.exflag,
e.authorid,
e.trackbacks,
e.isdraft,
e.allow_comments,
e.last_modified,
a.realname AS author,
a.username AS loginname,
a.email
, e.body, e.extended
FROM
serendipity_entries AS e
LEFT JOIN serendipity_authors a
ON e.authorid = a.authorid
LEFT JOIN serendipity_entrycat ec
ON e.id = ec.entryid
LEFT JOIN serendipity_category c
ON ec.categoryid = c.categoryid
INNER JOIN serendipity_entrytags AS entrytags ON (e.id = entrytags.entryid)
WHERE isdraft = 'false' AND e.timestamp <= 1308665700 AND entrytags.tag = 'der kommende aufstand' COLLATE utf8_unicode_ci
GROUP BY e.id
ORDER BY timestamp DESC
LIMIT 10
/ COLLATION 'utf8_unicode_ci' is not valid for CHARACTER SET 'latin1'
<?php
//mysql database name
$db_name = "$DATENBANKNAME";
//db connection
$dc = mysql_connect("$DATENBANKSERVER", "$DATENBANKUSER", "$DATENBANKPASSWORT);
mysql_select_db($db_name, $dc);
//set database charset and collation
$sql = "ALTER DATABASE `".$db_name."` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci";
mysql_query($sql);
//set tables charset and collation
$sql = "SHOW TABLES";
$rs = mysql_query($sql);
$tables = array();
while($r = mysql_fetch_array($rs)){
$sql = "ALTER TABLE `".$r[0]."` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci";
mysql_query($sql);
$tables[] = $r[0];
}
//set table rows charset and collation
foreach($tables as $tab){
$sql = "SHOW FULL COLUMNS FROM `".$tab."`";
$rs = mysql_query($sql);
while($r = mysql_fetch_array($rs)){
if(!empty($r['Collation']) && $r['Collation'] != 'utf8_unicode_ci'){
$nu = ($r['Null'] == "YES")? "NULL" : "NOT NULL";
$df = empty($r['Default'])? "" : "DEFAULT '".addslashes($r['Default'])."'";
$sql = "ALTER TABLE `".$tab."` CHANGE `".$r['Field']."` `".$r['Field']."` ".$r['Type']." CHARACTER SET utf8 COLLATE utf8_unicode_ci ".$nu." ".$df;
mysql_query($sql);
}
}
}
Leider deckt dies nicht alles ab, z.B. in serendipity_entries bleiben title body und extended einfach latin1_swedish_ci.
Vielleicht kann da ein netter PHP-Hacker weiterhelfen, dann wäre dies auch gelöst...
Das hat bestimmt etwas mit dem Indize entry_idx (FULLTEXT) auf title, body, extended zu tun.
Ist der bei dir gesetzt? Wenn ja, eventuell löschen, dann das Script laufen lassen und erst dann wieder neu setzen...