Колекция . Имате два избора, а не три:
utf8_bin
третира всички тези като различни :demandé
и demande
и Demandé
.
utf8_..._ci
(обикновено utf8_general_ci
или utf8_unicode_ci
) третира всички тези като едни и същи :demandé
и demande
и Demandé
.
Ако искате само чувствителност към главни и малки букви (demandé
=demande
, но нито едно от тях не съответства на Demandé
), нямате късмет.
Ако искате само чувствителност на акцента (demandé
=Demandé
, но нито едно от тях не съответства на demande
), нямате късмет.
Декларация . Най-добрият начин да правите каквото изберете:
CREATE TABLE (
name VARCHAR(...) CHARACTER SET utf8 COLLATE utf8_... NOT NULL,
...
PRIMARY KEY(name)
)
Не променяйте сортирането в движение . Това няма да използва индекса (тоест ще бъде бавно), ако съпоставянето е различно в name
:
WHERE name = ... COLLATE ...
БИНАРНО . Типове данни BINARY
, VARBINARY
и BLOB
са много подобни на CHAR
, VARCHAR
и TEXT
с COLLATE ..._bin
. Може би единствената разлика е, че текстът ще бъде проверен за валиден utf8 съхраняващ в VARCHAR ... COLLATE ..._bin
, но няма да бъде проверено при съхранение в VARBINARY...
. Сравнения (WHERE
, ORDER BY
и т.н.) ще бъде същото; тоест просто сравнявайте битовете, не правете сгъване на главни букви или премахване на акценти и т.н.