Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Use a chave primária sensível ao acento no MySQL


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.