Каковы различия между utf8 general ci и utf8 unicode ci? [дубликат]
Возможные Дубликаты:
в чем разница между utf8_general_ci и utf8_unicode_ci
у меня есть два варианта unicode, которые выглядят многообещающими для базы данных mysql.
utf8_general_ci unicode (multilingual), case-insensitive
utf8_unicode_ci unicode (multilingual), case-insensitive
не могли бы вы объяснить, в чем разница между utf8_general_ci и utf8_unicode_ci? Каковы последствия выбора одного из них при проектировании базы данных?
2 ответа:
utf8_general_ci
Это очень простой-и на Unicode, очень сломанный-сортировки, тот, который дает неверные результаты в общем текст в кодировке Unicode. Что он делает:
- преобразуется в форму нормализации Юникода D для канонической декомпозиции
- удаляет любые сочетания символов
- преобразует в верхний регистр
это не работает правильно на Unicode, потому что он не понимает Unicode корпус. Корпус Юникода в одиночку это гораздо сложнее, чем ASCII-мыслящий подход может справиться. Например:
- строчная "своих" "ß", но прописные ООО "ß" это "СС".
- есть две строчные греческие Сигмы, но только одна заглавная; рассмотрим "σσσυφος".
- буквы, такие как "ø", не разлагаются на "o" плюс диакритический знак, что означает, что он не будет правильно сортировать.
есть много других тонкостей.
utf8_unicode_ci
использует стандарт Алгоритм Сортировки Юникода, поддерживает так называемые расширения и лигатуры, например: Немецкая буква β (U + 00DF буква SHARP S) сортируется рядом с "ss" Буква Œ (U+0152 Латинская заглавная лигатура OE) сортируется рядом с "OE".
utf8_general_ci
не поддерживает расширения/лигатуры, ее виды все эти буквы как отдельные символы, а иногда и в неправильном порядке.
utf8_unicode_ci
is вообще точнее для всех сценариев. Например, на кириллическом блоке:utf8_unicode_ci
отлично подходит для всех этих языков: Русский, болгарский, белорусский, Македонский, сербский и украинский. В то время как utf8_general_ci подходит только для русского и болгарского подмножества кириллицы. Дополнительные буквы, используемые в белорусском, македонском, сербском и украинском языках сортируются не очень хорошо.стоимостью
utf8_unicode_ci
что это мало бит медленнее, чемutf8_general_ci
. Но это цена, которую вы платите за правильность. Либо у вас может быть быстрый ответ, который неверен, или очень медленный ответ, который прав. Ваш выбор. Очень трудно когда-либо оправдать дачу неправильных ответов, поэтому лучше всего предположить, чтоutf8_general_ci
не существует и всегда использоватьutf8_unicode_ci
. Ну, если ты не хочешь неверных ответов.источник:http://forums.mysql.com/read.php?103,187048, 188748#msg-188748
С Набор Символов Unicode на документация MySQL:
для любого набора символов Юникода операции выполняются с помощью
_general_ci
параметры сортировки быстрее, чем те, для_unicode_ci
параметры сортировки. Например, сравнения дляutf8_general_ci
параметры сортировки быстрее, но несколько менее корректны, чем сравнения дляutf8_unicode_ci
. Причина этого в том, чтоutf8_unicode_ci
поддерживает отображения, такие как расширения; то есть, когда один символ сравнивает как равные комбинации других символов. Например, на немецком и некоторых других языках"ß
" равна "ss
".utf8_unicode_ci
также поддерживает сокращения и игнорируемые символы.utf8_general_ci
- это устаревшие параметры сортировки, которые не поддерживают расширения, сокращения или игнорируемые символы. Он может выполнять только индивидуальные сравнения между персонажами.