Mysql
 sql >> Database >  >> RDS >> Mysql

Usa la chiave primaria sensibile all'accento in MySQL

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.