Confrontazioni . Hai due scelte, non tre:
utf8_bin li considera tutti come diversi :demandé e demandé e Demandé .
utf8_..._ci (tipicamente utf8_general_ci o utf8_unicode_ci ) li considera tutti come uguali :demandé e demandé e Demandé .
Se vuoi solo la distinzione tra maiuscole e minuscole (demandé =demandé , ma nessuno dei due corrisponde a Demandé ), sei sfortunato.
Se vuoi solo la sensibilità all'accento (demandé =Demandé , ma nessuno dei due corrisponde a demandé ), sei sfortunato.
Dichiarazione . Il modo migliore per fare qualunque cosa tu scelga:
CREATE TABLE (
name VARCHAR(...) CHARACTER SET utf8 COLLATE utf8_... NOT NULL,
...
PRIMARY KEY(name)
)
Non modificare le regole di confronto al volo . Questo non utilizzerà l'indice (ovvero sarà lento) se le regole di confronto sono diverse in name :
WHERE name = ... COLLATE ...
BINARIO . I tipi di dati BINARY , VARBINARY e BLOB sono molto simili a CHAR , VARCHAR e TEXT con COLLATE ..._bin . Forse l'unica differenza è che il testo verrà controllato per la memorizzazione di utf8 valida in un VARCHAR ... COLLATE ..._bin , ma non verrà verificato durante l'archiviazione in VARBINARY... . Confronti (WHERE , ORDER BY , ecc) saranno gli stessi; vale a dire, confrontare semplicemente i bit, non piegare la custodia o togliere l'accento, ecc.