MySQL: руководство профессионала
Шрифт:
MySQL осуществляет объединение utf8_unicode_ci согласно Unicode Collation Algorithm (UCA), описанному на http://www.unicode.org/reports/tr10/. Объединение использует version-4.0.0 UCA weight keys: http://www.unicode.org/Public/UCA/4.0.0/allkeys-4.0.0.txt. Следующее обсуждение использует utf8_unicode_ci, но это также верно и для ucs2_unicode_ci.
В настоящее время объединение utf8_unicode_ci имеет только частичную поддержку для Unicode Collation Algorithm.
Старшее свойство в utf8_unicode_ci: это поддерживает расширения, то есть когда один символ сравнивается как равный комбинациям других символов. Например, в немецком и некоторых других языках +Я равен ss.
utf8_general_ci объединение, которое не поддерживает расширения. Это может делать только взаимно-однозначные сравнения между символами. Это означает, что сравнения для объединения utf8_general_ci быстрее, но немного менее правильные, чем сравнения для utf8_unicode_ci.
Например, следующие равенства верны в utf8_general_ci и в utf8_unicode_ci:
+Д = A
+Ц = O
+Ь = U
Различие между объединениями: это является истинным для utf8_general_ci:
+Я = s
В то время, как это истинно для utf8_unicode_ci:
+Я = ss
MySQL осуществляет специфические для языка объединения для набора символов utf8 только, если упорядочение с utf8_unicode_ci не работает хорошо для языка. Например, utf8_unicode_ci работает прекрасно для German и French, а значит нет никакой потребности создавать специальные объединения utf8 для этих двух языков.
utf8_general_ci также удовлетворителен для German и French за исключением того, что +Я равно s, но ss. Если это приемлемо для вашей прикладной программы, то применяйте utf8_general_ci, потому что это быстрее. Иначе, используйте utf8_unicode_ci, потому что это более точно.
utf8_swedish_ci, подобно другим специфическим для языка объединениям utf8, получен из utf8_unicode_ci с дополнительными правилами языка. Например, в Swedish следующие связи хранения, которые неприменимы для German или French:
+Ь = Y < +Ц
Объединения utf8_spanish_ci и utf8_spanish2_ci соответствуют современному и традиционному испанскому, соответственно. В обоих объединениях + (n-tilde) отдельный символ между n и o. Кроме того, для традиионного испанского ch отдельный символ между c и d, а ll отдельный символ между l и m
10.10.2. Западноевропейские наборы символов
Западноевропейские наборы символов покрывают большинство западноевропейских языков, типа French, Spanish, Catalan, Basque, Portuguese, Italian, Albanian, Dutch, German, Danish, Swedish, Norwegian, Finnish, Faroese, Icelandic, Irish, Scottish
Объединения ascii (US ASCII):
ascii_bin
ascii_general_ci (значение по умолчанию)
Объединения cp850 (DOS West European):
cp850_bin
cp850_general_ci (значение по умолчанию)
Объединения dec8 (DEC Western European):
dec8_bin
dec8_swedish_ci (значение по умолчанию)
Объединения hp8 (HP Western European):
hp8_bin
hp8_english_ci (значение по умолчанию)
Объединения latin1 (cp1252 West European):
latin1_bin
latin1_danish_ci
latin1_general_ci
latin1_general_cs
latin1_german1_ci
latin1_german2_ci
latin1_spanish_ci
latin1_swedish_ci (значение по умолчанию)
latin1 заданный по умолчанию набор символов. MySQL latin1 представляет собой тот же набор символов, что и Windows cp1252. Это означает, что это официальный ISO 8859-1 или IANA (Internet Assigned Numbers Authority) latin1, но IANA latin1 обрабатывает точки между 0x80 и 0x9f как неопределенные в то время, как cp1252 и, следовательно, MySQL latin1 назначают символы для тех позиций. Например, 0x80 знак Euro. Для неопределенных записей в cp1252 MySQL транслирует 0x81 в Unicode 0x0081, 0x8d в 0x008d, 0x8f в 0x008f, 0x90 в 0x0090 и 0x9d в 0x009d.
Объединение latin1_swedish_ci это значение по умолчанию, которое, вероятно, используется большинством заказчиков MySQL. Хотя часто скажется, что это основано на правилах объединения Swedish/Finnish, имеются шведы и финны, кто не соглашаются с этой инструкцией.
Объединения основаны на latin1_german1_ci и latin1_german2_ci на стандартах DIN-1 и DIN-2, где DIN замещает Deutsches Institut f+r Normung (немецкий эквивалент ANSI, в общем). DIN-1 называется словарным объединением, а DIN-2 называется объединением телефонного справочника.
Правила latin1_german1_ci (словарного):
+Д = A
+Ц = O
+Ь = U
+Я = s
Правила latin1_german2_ci (телефонного справочника):
+Д = AE
+Ц = OE
+Ь = UE
+Я = ss
В объединении latin1_spanish_ci + (n-tilde) отдельный символ между letter between n и o.
Объединения macroman (Mac West European):
macroman_bin
macroman_general_ci (значение по умолчанию)