В чем разница между utf8_unicode_ci и utf8mb4_0900_ai_ci - PullRequest
0 голосов
/ 26 февраля 2019

В чем разница между utf8mb4_0900_ai_ci и utf8_unicode_ci кодированием текста базы данных в mysql (особенно с точки зрения производительности)?

1 Ответ

0 голосов
/ 06 марта 2019
  • Кодировка такая же.То есть байты выглядят одинаково.
  • Набор символов отличается.У utf8mb4 больше символов.
  • Сличение (как выполняется сравнение) отличается.
  • Производительность отличается, но это редко имеет значение.

utf8_unicode_ci подразумевает CHARACTER SET utf8, который включает только 1-, 2- и 3-байтовые символы UTF-8.Следовательно, он исключает большинство символов эмодзи и некоторые китайские иероглифы.

utf8mb4_unicode_ci означает, что CHARACTER SET utf8mb4 соответствует COLLATION для 4-байтового CHARACTER SET utf8mb4.

Организация Unicode быларазвитие спецификации на протяжении многих лет.Вот сопоставления его «версий» с MySQL Collations:

4.0   _unicode_
5.20  _unicode_520_
9.0   _0900_

Большинство различий будут в областях, с которыми большинство людей никогда не сталкиваются.Один пример: В какой-то момент изменение позволило различать и упорядочивать эмодзи.

Суффикс:

_bin      -- just compare the bits; don't consider case folding, accents, etc
_ci       -- case folding (A=a) and accent stripping (a=á)
_ai_ci    -- case insensitive and accent insensitive
_as (etc) -- accent-sensitive (etc)

Производительность:

_bin         -- simple, fast
_general_ci  -- fails to compare multiple letters; eg ss=ß, so somewhat fast
...          -- slower
_900_        -- (8.0) much faster because of a rewrite

ОднакоСкорость сортировки обычно является наименьшей из проблем производительности в запросах.INDEXes, JOINs, подзапросы, сканирование таблиц и т. Д. Гораздо более важны для производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...