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.