www.bimminger.at

Tipps / Programmieren

Programmieren

SQLSTATE[HY000]: General error: 1267 Illegal mix of collations - VIEW


Bei einem Projekt von jemand anderem durfte ich kurz Hilfestellung zu einer Fehlermeldung in Laravel geben. Die Fehlermeldung war folgende:

SQLSTATE[HY000]: General error: 1267 Illegal mix of collations
(utf8_general_ci,COERCIBLE) and (utf8_unicode_ci,COERCIBLE) for
operation 'like'  ...


Das gesamte Projekt wurde als Laravel-Projekt umgesetzt und alle für diese Abfrage erstellten Tabellen wurden mit Charakter-Set "utf-8" und Collation "utf8_unicode_ci" angelegt. Umso erstaunlicher dass hier dann ein Problem mit unterschiedlcihen Collations auftrat. Aber nach kurzer Recherche war das auch klar. Für diese Abfrage wurde ein eigener View über die MySQL-Konsole erstellt und zwar mit einer IF-Anweisung im SQL-Statement. Also etwas in dieser Art:

CREATE VIEW statusview AS SELECT id, IF(ende<>NULL, 'Beendet', 'Laufend') as status FROM tabelle;


Was war hier das Problem? Die Standard-Einstellung für MySQL-Konsole war noch auf "unicode_general_ci" gestellt. Das macht im Normalfall kein Problem bei der Erstellung von Views die auf Tabellen zurückgreifen wo die Collations übereinstimmen. Aber ab der Verwendung des IF-Statements mit einem daraus resultierenden neuen Feld - in unserem Beispiel "status" kommt hier die Einstellung der Konsole zum tragen.

Um das zu vermeiden kann man zum Beispiel vor dem Erstellen des Views die Collation setzen:

SET collation_connection = utf8_unicode_ci;
CREATE VIEW statusview AS SELECT id, IF(ende<>NULL, 'Beendet', 'Laufend') as status FROM tabelle;


Oder man kann natürlich auch die Einstellungen zur MySQL-Konsole verändern und die Default-Collation setzen.

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'

Um einen Diskussionsbeitrag zu posten müssen Sie eingeloggt sein.