dedlfix: Sortierung von Strings in MySQL mit utf8_bin

Beitrag lesen

Tach!

SELECT name COLLATE utf8_general_ci FROM …

Hmm, in der Ergebnismenge aus der Abfrage ist das Arrayelement $row['user_name'] (wie das Feld in echt™️ heißt) laut PHP-Fehlermeldung unbekannt.

Es ist halt eine Expression und nicht nur ein Feld. Es ist in $row, aber unter anderem Key als user_name. print_r() oder var_dump() klärt auf.

Erweitere ich deinen Ansatz um ein Alias, das mit dem Feldnamen identisch ist, funktioniert die Abfrage.

Ja, ein Alias geht natürlich, um einen freundlichen Namen zu bekommen.

Der Ansatz von @TS, die Kollationsangabe in der ORDER-BY-Klausel zu notieren, funktioniert ebenfalls und sieht mMn auch schlüssiger aus, schließlich geht es ja um die Sortierung.

Das war auch mein erster Gedanke, aber den hatte ich wieder verworfen, weil ich im Handbuch nach einem COLLATE in der ORDER BY-Syntax gesucht und nicht gefunden hatte. Aber klar, das geht dort auch, weil name COLLATE utf8_general_ci als Expression gilt und damit genauso gültig ist, wie beispielsweise RAND().

In anderen Anwendungsfällen ist TS' Lösung vermutlich ebenbürtig, oder gibt es da Fallstricke?

Kann ich mir nicht vorstellen. Die Kollation ändert an den Daten nichts, anders als beispielsweise eine andere Kodierung zu verwenden. Also sollte es egal sein, ob du das beim SELECT angibst und dann sortierst oder ob du es nur zum Sortieren berücksichtigst.

dedlfix.