Итак, сначала посмотрим, правильно ли я прав:
Кодировка - это набор символов и кодировок. Сопоставление - это набор правил для сравнения символов в кодировке.
Я должен использовать utf8mb4, потому что mysql utf8 - это мошенничество, до 3-байтов, а не истинная реальная версия utf8 charset до 4 байтов в PHP, например.
Таким образом, utf8mb4 - это кодировка, а utf8mb4_unicode_ci/utf8mb4_bin - это два из его многочисленных различий в доступных комбинациях.
utf8_unicode_ci делает нечувствительное к регистру сравнение и другие специальные сравнения (я слышал, что это испортит все акценты на французском языке, например). utf8_bin чувствителен к регистру, поскольку он сравнивает двоичные значения символа.
Теперь вопросы:
1. Если, например, я хочу разрешить регистрационные имена Case-Sensitive, используя utf8mb4_unicode_ci, мне придется делать такие вещи, как:
SELECT name FROM table WHERE BINARY name = 'MyNaMEiSFUlloFUPPERCases';
?
2. Если, например, я хочу разрешить поиск без учета регистра с помощью utf8mb4_bin, мне придется делать такие вещи, как:
SELECT name FROM table WHERE LOWER(name) LIKE '%myname%'
?
3. Итак, какой из них лучше? Как насчет плохих вещей, которые я слышу о utf8_unicode_ci и акцентах/других специальных символах?
Спасибо:)