UTF-8: генерал? Бин? Юникод?
Я пытаюсь выяснить, какие параметры сортировки я должен использовать для различных типов данных. 100% содержимого, которое я буду хранить, отправлено пользователем.
Я понимаю, что я должен использовать UTF-8 General CI (без учета регистра) вместо двоичного кода UTF-8. Однако я не могу найти четкого различия между UTF-8 General CI и UTF-8 Unicode CI.
- должен ли я хранить пользовательский контент в UTF-8 General или UTF-8 Unicode CI колонны?
- к какому типу данных будет применим двоичный код UTF-8?
4 ответа:
В общем, 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
Что касается utf8_bin: Оба utf8_general_ci и utf8_unicode_ci выполнить сравнение без учета регистра. В отличии от этого, utf8_bin чувствителен к регистру (среди других различий), потому что это сравнивает двоичные значения символов.
вы также должны знать о том, что с utf8_general_ci при использовании поля varchar в качестве уникального или первичного индекса вставка 2 значений, таких как " a " и "á", даст дублирующую ключевую ошибку.
utf8_bin
сравнивает биты вслепую. Ни складывания чемодана, ни снятия акцента.utf8_general_ci
сравнивает один байт в один байт. Это делает случай складывания и акцент зачистки, но не 2-символьные сравнения:ij
не равноij
в этой сортировке.utf8_*_ci
это набор языковых правил, но в остальном, какunicode_ci
. Некоторые особые случаи:Ç
,Č
,ch
,ll
utf8_unicode_ci
следует старый стандарт Юникода для сравнения.ij
=ij
, аae
!=æ
utf8_unicode_520_ci
соответствует более новому стандарту Unicode.ae
=æ
посмотреть сопоставление графиков для получения подробной информации о том, что равно тому, что в различных параметрах сортировки utf8.
utf8
,как определено MySQL ограничивается 1-3-байтовыми кодами utf8. Это оставляет без внимания смайлики и некоторые из китайских. Так что вам действительно стоит переключиться наutf8mb4
если вы хотите выйти далеко за пределы Европы.вышеуказанные пункты применяются к
utf8mb4
, после подходящего изменения орфографии. Идем вперед,utf8mb4
иutf8mb4_unicode_520_ci
предпочтительнее.
- utf16 и utf32-это варианты на utf8; они практически не используются.
- ucs2 ближе к "Unicode", чем" utf8"; он практически не используется.
действительно, я проверил сохранение значений, таких как " é " и " e " в столбце с уникальный и они вызывают повторяющиеся ошибки как 'utf8_unicode_ci' и 'utf8_general_ci'. Вы можете сохранить их только в столбце с сортировкой 'utf8_bin'.
и mysql docs (in http://dev.mysql.com/doc/refman/5.7/en/charset-applications.html) предложите в своих примерах установить параметры сортировки 'utf8_general_ci'.
[mysqld] character-set-server=utf8 collation-server=utf8_general_ci