Agrupamentos . Você tem duas opções, não três:
utf8_bin
trata tudo isso como diferente :demandé
e demande
e Demandé
. utf8_..._ci
(normalmente utf8_general_ci
ou utf8_unicode_ci
) trata tudo isso como mesmo :demandé
e demande
e Demandé
. Se você deseja apenas diferenciar maiúsculas de minúsculas (
demandé
=demande
, mas nenhum corresponde a Demandé
), você está sem sorte. Se você deseja apenas sensibilidade ao acento (
demandé
=Demandé
, mas nenhum corresponde a demandé
), você está sem sorte. Declaração . A melhor maneira de fazer o que você escolher:
CREATE TABLE (
name VARCHAR(...) CHARACTER SET utf8 COLLATE utf8_... NOT NULL,
...
PRIMARY KEY(name)
)
Não altere o agrupamento imediatamente . Isso não usará o índice (ou seja, será lento) se o agrupamento for diferente em
name
:WHERE name = ... COLLATE ...
BINÁRIO . Os tipos de dados
BINARY
, VARBINARY
e BLOB
são muito parecidos com CHAR
, VARCHAR
e TEXT
com COLLATE ..._bin
. Talvez a única diferença seja que o texto será verificado para armazenar utf8 válido em um VARCHAR ... COLLATE ..._bin
, mas não será verificado ao armazenar em VARBINARY...
. Comparações (WHERE
, ORDER BY
, etc) será o mesmo; isto é, simplesmente compare os bits, não faça dobras de caixa ou destaque, etc.