Какой COLLATE я должен установить для использования всех возможных языков? - PullRequest
0 голосов
/ 04 января 2019

У меня есть столбец с именем username, я хочу, чтобы пользователь мог вставлять текст на японском, римском, арабском, корейском и все, что возможно, включая специальные символы [https://en.wiktionary.org/wiki/Index:All_languages], что COLLATE я должен установить в моей базе данных и таблицах?

Я использую utf_general_ci, я новичок, поэтому я не знаю, является ли это лучшим COLLATE для моих нужд. Мне нужно выбрать правильный COLLATE, чтобы избежать ошибки sql, потому что я не буду использовать preg_replace или функцию для замены специальных символов, я буду использовать только prepared statement, чтобы избежать внедрения SLQ и защитить базу данных.

Ответы [ 2 ]

0 голосов
/ 05 января 2019
  • Первый выбор (MySQL 8.0): utf8mb4_0900_ai_ci
  • Второй выбор (по состоянию на 5.6): utf8mb4_unicode_520_ci
  • Третий выбор (5,5+): utf8mb4_unicode_ci
  • До версии 5.5 вы не можете справиться со всеми китайцами и эмодзи: utf8_unicode_ci

Цифры относятся к стандартам Unicode 9.0, 5.20 и (без номера) 4.0.

Нет сортировки, которая подходит для сортировки всех языков одновременно. Испанский, немецкий, турецкий и т. Д. Имеют причуды, которые несовместимы. Приведенные выше сопоставления являются «лучшими» из доступных для общего применения.

utf8mb4 обрабатывает все символы, указанные в Unicode (включая чероки, клингоны, клинопись, византийцы и т. Д.)

Если в фокусе португальский:

См. https://pt.stackoverflow.com/ и сопоставление MySQL для португальского .

Изучите это для 8.0 или это для pre 8.0 , чтобы увидеть, какая сортировка utf8 / utf8mb4 наиболее близка к правильной сортировке португальского ' ». Возможно, utf8mb4_danish_ci или utf8mb4_de_pb_0900_ai_ci будет лучше.

(В противном случае используйте «варианты», перечисленные выше.)

0 голосов
/ 04 января 2019

Если вы используете MySQL 5.5.3 или выше, я бы рекомендовал кодировку UTF-8 utf8mb4_unicode_ci . AFAIK поддерживает большинство, если не все языки, и реализует стандарт Unicode для сортировки и сравнения. В качестве второго варианта взгляните на utf8mb4_general_ci, который может быть быстрее, но также и менее точным.

См. этот превосходный пост SO для получения (многих) подробностей или ознакомьтесь с официальным документом MySQL .

Ниже 5.5.3 utf8_unicode_ci ваш друг.

...