sql >> Base de Datos >  >> RDS >> Mysql

Use la clave principal sensible al acento en MySQL

Colaciones . Tienes dos opciones, no tres:

utf8_bin trata a todos estos como diferentes :demandé y demande y Demandé .

utf8_..._ci (típicamente utf8_general_ci o utf8_unicode_ci ) trata a todos estos como lo mismo :demandé y demande y Demandé .

Si solo desea distinguir entre mayúsculas y minúsculas (demandé =demande , pero ninguno coincide con Demandé ), no tienes suerte.

Si solo desea sensibilidad al acento (demandé =Demandé , pero ninguno coincide con demande ), no tienes suerte.

Declaración . La mejor manera de hacer lo que elijas:

CREATE TABLE (
    name VARCHAR(...)  CHARACTER SET utf8  COLLATE utf8_...  NOT NULL,
    ...
    PRIMARY KEY(name)
)

No cambie la intercalación sobre la marcha . Esto no usará el índice (es decir, será lento) si la intercalación es diferente en name :

WHERE name = ... COLLATE ...

BINARIO . Los tipos de datos BINARY , VARBINARY y BLOB son muy parecidos a CHAR , VARCHAR y TEXT con COLLATE ..._bin . Quizás la única diferencia es que el texto se verificará para almacenar utf8 válido en un VARCHAR ... COLLATE ..._bin , pero no se verificará cuando se almacene en VARBINARY... . Comparaciones (WHERE , ORDER BY , etc) será el mismo; es decir, simplemente compare los bits, no haga dobleces ni recortes de acentos, etc.