Я пытаюсь выяснить, какое сопоставление я должен использовать для различных типов данных. 100% содержания, которое я буду хранить, отправлены пользователями.
Мое понимание - то, что я должен использовать Общий CI UTF-8 (Нечувствительный к регистру) вместо Двоичного файла UTF-8. Однако я не могу найти ясное различием между Общим CI UTF-8 и Unicode UTF-8 CI.
В целом, utf8_general_ci быстрее, чем utf8_unicode_ci, но менее корректен.
Вот в чем разница:
Для любого набора символов Unicode операции, выполняемые с использованием коллизии _general_ci, быстрее, чем операции с использованием коллизии _unicode_ci. Например, сравнение для коллизии utf8_general_ci выполняется быстрее, но немного менее корректно, чем сравнение для utf8_unicode_ci. Причина этого в том, что utf8_unicode_ci поддерживает сопоставления типа расширения; то есть, когда один символ сравнивается как равный с комбинациями других символов. Например, в немецком и некоторых других языках "ß" равен "ss". utf8_unicode_ci также поддерживает сокращения и игнорируемые символы. utf8_general_ci - это унаследованная коллизия, которая не поддерживает расширения, сокращения и игнорируемые символы. Она может выполнять только однократное сравнение между символами.
Цитируется по: http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html
Для более подробного объяснения, пожалуйста, прочитайте следующее сообщение с форумов MySQL: http://forums.mysql.com/read.php?103,187048,188748
As for utf8_bin: utf8_general_ci и utf8_unicode_ci выполняют сравнение без учета регистра. В отличие от них, utf8_bin чувствителен к регистру (среди прочих отличий), поскольку сравнивает двоичные значения символов.