Hallo Vinzenz!
Ich bräuchte ja eine Variante, die 'on the fly' die Daten in der Tabellen Spalte umwandelt und die Kollation (für die Abfrage) ändert.
Also nochmal die ganz konkrete Frage: Wie kann ich nur für die jeweilige Abfrage den Zeichensatz und die Kollation meiner in der Tabelle vorhandenen Werte von utf-8 utf8_unicode_ci nach latin1 latin1_german2_ci ändern?
here we go:
- Schritt: eine nette Tabelle mit einer UTF8-Spalte:
CREATE TABLE example
(name VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci')
Gibt's schon ...
> 2. Schritt: wir fügen unseren "Müller" in UTF-8 ein
>
> ~~~sql
INSERT INTO
> example
> SET name = 'Müller'
>
... und das auch ...
- Schritt: wir suchen unseren Müller mit dem Suchtext "Mueller"
a) einfach so
SELECT
name
FROM
example
WHERE
name = 'Mueller'
>
> und bekommen erwartungsgemäß eine leere Ergebnismenge
... exakt.
> b) wir konvertieren unsere Spalte in latin1,
> weil latin1 die von uns benötigte Kollation latin1\_german2 hat.
> (Groß- und Kleinschreibung wäre im Moment nicht benötigt):
>
> ~~~sql
SELECT
> name
> FROM
> example
> WHERE
> [link:http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html#function_convert@title=CONVERT](name USING latin1) COLLATE latin1_german2_ci = 'Mueller'
>
Perfekt! Das war der "Knackpunkt".
und finden, wie von Dir gefordert, unseren Datensatz:
Wunderbar!
Ich verstehe vermutlich Dein Problem nicht.
Mein Problem war, dass ich nicht die richtige Kombination aus CONVERT, CAST und COLLATE gefunden habe.
Für mich irritierenderweise verwendet das Handbuch (was ich gefunden habe) nämlich immer CAST in Kombination mit COLLATE und das führte bei mir immer nur zu einem Error.
Also besten Dank für die freundliche Hilfe & Unterstützung - Problem gelöst.
Kurze Nachfrage noch zu deiner Aussage im vorherigen Posting, dass du mysqli gegenüber mysql vorziehen würdest: Aus welchen (praktischen) Gründen/ Überlegungen heraus würdest du das tun?
Für mich macht es keinen großen Unterschied, da ich von weder noch eine große Ahnung habe - mich also eh in entweder oder erst vertiefen muss.
Gruß Gunther