:::: MENU ::::

WebDevExp

Meine Erfahrungen in der Webentwicklerwelt

Case-Sensitivity in MySQL

mysql

Case-Sensitivity in MySQL

Konnte es selbst nicht glauben, aber ich war aus irgendeinem Grund sehr lange der Meinung, dass Queries mit „WHERE field = ‚value'“ case-sensitiv sind und „WHERE LIKE ‚value'“ nicht. Die Annahme ist komplett Falsch und es hängt alleine vom Charset (Collation) des Datenbankfeldes ab. Die meisten Standardcharset haben ein „_ci“ am Ende ihres Namens, dies steht für „case-insensitive“.
Beim genaueren „darüber-nachdenken“ viel mir auf, dass es meistens absolut ausreichend ist, wenn das Query nicht case-sensitiv ist, weshalb ich mir anscheinend nie gedanken darüber machte. Nun gibt es zwei Möglichkeiten, wie man explizit nach Groß- oder Kleinschreibung sucht. Entweder man erstellt das Datenbankfeld bereits in einem binären Datentyp (z.B. latin1_bin oder utf8_bin) oder man baut sein Query ein wenig um.

Welche Möglichkeit man nutzt, hängt davon, ob man eben einfach nur ein kurzes Query abfeuern will oder ob es für die Applikation an sich nötig ist.
Problem an der zweiten Lösung ist, dass diese immer in einem Full-table-scan endet, da jedes Textfeld in einen binären Datentyp umgewandelt werden muss, um zu suchen. Hier ein Beispiel:

SELECT * FROM data
WHERE field COLLATE utf8_bin = 'Abc'

Umgekehrt geht das ganze natürlich auch, falls man case-unsnsitiv in einem binären Datentyp suchen will.

Leave a comment

Loading Facebook Comments ...