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.