MySQL - Case Sensitive

G.P.

Legendäres Mitglied
Ich möchte eine einfache MySQL abfrage machen :

SELECT *
FROM tabelle
WHERE spalte LIKE "%test%"

Mit dieser Abfrage möchte ich alle Ergebnisse haben, in welchen das Wort "test" vorkommt, unabhängig von der eigentlichen Schreibweise. Leider scheint die Abfrage aber Case Sensitive zu sein, denn bei "Test" und "test" bekomme ich unterschiedliche Ergebnisse.

Weiss jemand wie ich die Abfrage machen kann, damit sie NICHT Case Sensitive ist?

MfG
GP

EDIT: die abzufragende Spalte ist UTF-8
 
Schlechte Möglichkeit:

QUOTE WHERE Lower(spalte) LIKE Lower("%test%")


Ich weiß zwar nicht, ob es die MS-Sql-Funktion Lower bei mySql gibt, aber etwas analoges wird es schon geben.


Bessere Variante, da allgemein wirksam:

Die Spalte wird mit einer Sortierung definiert sein, die Groß/Kleinschreibung beachtet. Das gilt dann nicht bloß für die Sortierung, sondern auch für die Suche. Bei den Spalten, bei denen man das nicht will, macht es üblicherweise Sinn, die Sortierung auf eine Sortierung zu ändern, die keine Groß/Kleinschreibung berücksichtigt.

MS-SqlServer:


QUOTE Alter Table Tabelle Alter Column spalte nvarchar(50) Collate Latin1_General_CI_AI


mySql wird da etwas ähnliches kennen.
 
Negationen... ich hatte zuerst beschrieben, wie man eine "fallabhängige" Abfrage zustande bekommt, weil das ja standardmäßig so gehandhabt wird. Hier jetzt beide Varianten:

Kernzeile:

select spalte from tabelle where spalte COLLATE utf8_general_ci like '%test%';

=== Test (in Datei test.sql, dann mysql -N < test.sql)

create database test_tmp_01;
use test_tmp_01;
create table tabelle ( spalte varchar(255) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
insert into tabelle values ('test'), ('Test'), ('TEST'), ('Testwelt'), ('Welttest'), ('EineWeltTest'), ('einkleinertest');

select "";
select "Normale Abfrage, implizit fallunabhängig:";
select spalte from tabelle where spalte like '%test%';

select "";
select "Abfrage, explizit fallabhängig:";
select spalte from tabelle where spalte COLLATE utf8_bin like '%test%';

select "";
select "Abfrage, explizit fallunabhängig:";
select spalte from tabelle where spalte COLLATE utf8_general_ci like '%test%';

drop database test_tmp_01;
 
Zurück
Oben