Zbiory . Masz dwie możliwości, a nie trzy:
utf8_bin traktuje je wszystkie jako różne :demandé i demandé i Demandé .
utf8_..._ci (zazwyczaj utf8_general_ci lub utf8_unicode_ci ) traktuje je wszystkie jako takie same :demandé i demandé i Demandé .
Jeśli chcesz rozróżniać tylko wielkość liter (demandé =demandé , ale nie pasuje do Demandé ), nie masz szczęścia.
Jeśli chcesz tylko czułość akcentu (demandé =Demandé , ale nie pasuje do demandé ), nie masz szczęścia.
Deklaracja . Najlepszy sposób na zrobienie tego, co wybierzesz:
CREATE TABLE (
name VARCHAR(...) CHARACTER SET utf8 COLLATE utf8_... NOT NULL,
...
PRIMARY KEY(name)
)
Nie zmieniaj sortowania w locie . To nie użyje indeksu (to znaczy będzie powolne), jeśli sortowanie jest inne w name :
WHERE name = ... COLLATE ...
BINARNY . typy danych BINARY , VARBINARY i BLOB są bardzo podobne do CHAR , VARCHAR i TEXT z COLLATE ..._bin . Być może jedyną różnicą jest to, że tekst zostanie sprawdzony pod kątem prawidłowego przechowywania utf8 w VARCHAR ... COLLATE ..._bin , ale nie będzie sprawdzane podczas przechowywania w VARBINARY... . Porównania (WHERE , ORDER BY itd.) będą takie same; to znaczy po prostu porównaj bity, nie zaginaj koperty ani nie usuwaj akcentów itp.