MySQL сортировка для хранения многоязычных данных неизвестного языка - PullRequest
10 голосов
/ 26 ноября 2010

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

Какой набор / набор символов MySQL я должен использовать для достижения этой цели?

Должен ли я использовать какой-нибудь набор символов Unicode?

И, конечно, эти языки не из этой вселенной, они должны быть в наборе, который мы в основном используем.

Ответы [ 3 ]

17 голосов
/ 27 ноября 2010

Вы должны использовать сопоставление Unicode.Вы можете установить его по умолчанию в вашей системе или в каждом поле ваших таблиц.Существуют следующие имена параметров сортировки Unicode, и в этом их отличие:

utf8_general_ci - очень простое сравнение.Он просто - удаляет все акценты, а затем преобразует их в верхний регистр и использует для сравнения код такого вида «базовой буквы».

utf8_unicode_ci использует таблицу элементов сопоставления Unicode по умолчанию.

Основные отличия:

  1. utf8_unicode_ci поддерживает так называемые расширения и лигатуры, например: немецкая буква ß (U + 00DF LETTER SHARP S) сортируется рядом с буквой "ss" Œ (U + 0152 LATIN CAPITALLIGATURE OE) сортируется рядом с "OE".

utf8_general_ci не поддерживает расширения / лигатуры, он сортирует все эти буквы как отдельные символы, а иногда и в неправильном порядке.

utf8_unicode_ci обычно более точен для всех сценариев.Например, на кириллическом блоке: utf8_unicode_ci подходит для всех этих языков: русский, болгарский, белорусский, македонский, сербский и украинский.Пока utf8_general_ci подойдет только для русского и болгарского подмножества кириллицы.Дополнительные буквы, используемые на белорусском, македонском, сербском и украинском языках, сортируются неправильно.

+ / - Недостаток utf8_unicode_ci в том, что он немного медленнее, чем utf8_general_ci.

Поэтому в зависимости от того, знаете ли вы или нет, какие конкретные языки / символы вы собираетесь использовать, я рекомендую использовать utf8_unicode_ci, который имеет более широкий охват.

Извлечено из форумов MySQL .

1 голос
/ 26 ноября 2010

UTF-8 охватывает большинство языков, это ваша самая безопасная ставка.Однако есть исключения, и вы должны убедиться, что все языки, которые вы хотите охватить, работают в UTF-8.Мой опыт хранения наборов символов, который MySQL не понимает, заключается в том, что он не сможет правильно сортировать данные, но данные остаются без изменений, пока я их считываю в той же кодировке символов, в которой я их записал.

UTF-8 - кодировка символов, способ хранения числа.Какой символ представлен каким числом Unicode - важное различие.Unicode имеет большое количество языков, которые он охватывает, и UTF-8 может кодировать их все (от 0 до 10FFFF, вроде), но Java не может обрабатывать все, так как внутреннее представление виртуальной машины является 16-битным символом (не то, что вы заботитесь оJava:).

0 голосов
/ 27 апреля 2017

Вы можете вставить любой текст языка в MySQL Table, изменив Поле сортировки таблицы на 'utf8_general_ci'. Это без учета регистра.

...