Faire une recherche case insensitive mariadb

Parfois il nous arrive de vouloir faire une recherche sur un champ en ignorant la case.

La mauvaise façon de le faire serait :

SELECT * FROM table WHERE upper(champ) = upper(‘morgan’);

Faire ceci est catastrophique en terme de performance, et en plus, si jamais on met un index sur le champ, il ne pourra pas fonctionner car les index sont sensible a la case.

Heureusement les sgbd modernes viennent avec des solutions. Pour mariaDB/Mysql on peut simplement utiliser un collate différent. Les collates finissant par _bin sont case sensitive et _ci sont case insensitive.

SELECT * FROM table WHERE champ = ‘morgan’ COLLATE utf8mb4_unicode_ci;