Collations . Vous avez deux choix, pas trois :
utf8_bin traite tout cela comme différent :demandé et demande et Demandé .
utf8_..._ci (typiquement utf8_general_ci ou utf8_unicode_ci ) traite tout cela comme le même :demandé et demande et Demandé .
Si vous ne voulez que la sensibilité à la casse (demandé =demande , mais aucun ne correspond à Demandé ), vous n'avez pas de chance.
Si vous souhaitez uniquement la sensibilité aux accents (demandé =Demandé , mais aucun ne correspond à demande ), vous n'avez pas de chance.
Déclaration . La meilleure façon de faire ce que vous choisissez :
CREATE TABLE (
name VARCHAR(...) CHARACTER SET utf8 COLLATE utf8_... NOT NULL,
...
PRIMARY KEY(name)
)
Ne modifiez pas le classement à la volée . Cela n'utilisera pas l'index (c'est-à-dire qu'il sera lent) si le classement est différent dans name :
WHERE name = ... COLLATE ...
BINAIRE . Les types de données BINARY , VARBINARY et BLOB ressemblent beaucoup à CHAR , VARCHAR , et TEXT avec COLLATE ..._bin . La seule différence est peut-être que le texte sera vérifié pour un stockage utf8 valide dans un VARCHAR ... COLLATE ..._bin , mais il ne sera pas vérifié lors du stockage dans VARBINARY... . Comparaisons (WHERE , ORDER BY , etc.) seront les mêmes ; c'est-à-dire, comparez simplement les morceaux, ne faites pas de pliage de cas ou de décapage d'accent, etc.