Hi!
ich generiere 2 temporäre Tabellen und erhalte bei einem anschließenden JOIN einen illegalen collation-mix.
Woher nimmt mysql beim Tabellen generieren den Standart-Wert für die collation und wie gebe ich nun einer dieser beiden Tabellen eine collations-Vorgabe mit?
Wenn du keinen angibst, dann wird für die Tabelle der Wert aus der Datenbank genommen. Letztlich interessiert jedoch nur der Wert des jeweiligen Feldes. Felder bekommen ohne explizite Angabe ihren Wert von der Tabelle.
Ich habe es mit folghendem State versucht, aber so geht es wohl eher nicht:
CREATE TEMPORARY TABLE _table_1 SELECT FROM_UNIXTIME(Timestamp, '%Y%-%m') AS ym collate latin1_german1_ci, ...
Ist das eine Syntax, wie sie das Handbuch beschreibt? Warum probierst du mit einer der dort angegebenen Varianten?
Dein Problem ist nicht die Charset/Collation-Angabe der Tabelle. Bei einem CREATE TABLE ... SELECT ... bekommen die neuen Felder die gleiche Kollation wie die übernommenen Felder. Bei berechneten Feldern, wie in deinem Fall, wird die Kodierung/Kollation der Verbindung verwendet, also die, die du mit mysql_set_charset() oder SET NAMES eingestellt hast. Wenn du explizit eine angeben möchtest, musst du das bei der Felddefinition (im CREATE-Teil) machen oder mit einem CONVERT(... USING ...) arbeiten.
Lo!