|
MySQL.RU - Webboard
Вернуться
Проблема языковых культур UNICODE (Nick) 26/05/2006 - 12:40:11
Re: Проблема языковых культур UNICODE (Dinky) 26/05/2006 - 19:30:51
Re: Проблема языковых культур и UNICODE (Nick) 29/05/2006 - 13:26:00
Re: Проблема языковых культур и UNICODE (Dinky) 29/05/2006 - 17:35:11
> Original message text:
> From: Nick - 26/05/2006 - 12:40:11
> Subject:Проблема языковых культур UNICODE
> -----------------
> Пишу мультиязыковую базу на MySQL 5.* и мультиязыковой интерфейс к ней. Сразу обнаружились непонятки.
>
> 1) Как соотносится двухбайтовый идентификатор "языковой культуры" в UNICODE с кодировкой/COLLATION в MySQL?
>
> 2) Одинаковыми или различными будут строки из разных культур одной языковой группы в таблице MySQL UTF8
> Например: Испанский язык в UNICODE представлен одним некультурным и девятнадцатью культурными диалектами. Одно и тоже слово в разных культурах одной группы может выглядеть одинаково, но кодироваться по разному...
>
> Как в MySQL реализовать контекстный поиск, когда контекст задан в одной культуре, а результат требуется из другой культуры одной языковой группы?
>
> Т.е. как найти все тождественные реализации слова в разных диалектах?
>
> 3) Где найти популярное, но полное описание принципа кодирования текста в UNICODE. Именно, непонятно как соотносится 1-байтовое кодирование номера языка, в 2-байтовом коде национального языка и 2-байтовый идентификатор того-же нац-языка в UNICODE?
>
> По идее, для UNICODE требуется 2 байта на номер языка и X байт на номер символа в пределах языка. Для русского 1, для китайского 3
> Но на самом деле в UTF8 мы видим совсем другую картину.
> 1 байт - номер языка и X байт номер символа.
> Непонятненько.
>
From: Nick - 29/05/2006 - 13:26:00
Subject:Проблема языковых культур и UNICODE
-----------------
Доки почитал и не только эти.
Попробую сформулировать вопрос более корректно, т.к. в предудущем посте написал непонятно и местами неправильно.
Для каждого набора символов(не путать с языком) в кодировке UNICODE(0000-FFFF) выделены НЕКИЕ фиксированные диапазоны. Например:
00 - 7F Базовая латиница
80 - FF Латиница дополнительная
400 - 4FF Кириллица
Какие именно поддиапазоны используются для конкретного языка я нигде не нашел...
Например, какой диапазон используется для Австралийского Английского?, для Украинского? Русского? Белорусского? Казахского(кириллического) :)
Подкажите, кто знает????
Переходим к MySQL на сервере.
Для хранения UNICODE-текстов в MySQL рекомендуется использовать кодировку UTF8 (это трансформированный формат UNICODE, предназначенный для передачи данных по каналам связи).
Для сортировки данных в пределах одного языка предусмотрены национальные сортировки COLLATION.
Для истинных мультиязыковых баз, национальная сортировка не имеет смысла. Существует также UNICODE-сортировка упорядочивающая все символы всех языков, по языкам и по значению, по достаточно сложному обобщенному алгоритму, учитывющему национальные особенности упорядочивания символов.
utf8_general_ci - быстрая, не совсем точная, регистронезависимая
utf8_unicode_ci - менее быстрая, соответствует стандарту, регистронезависимая
Итак создаем таблицу с унивесальным порядком сортировки
CREATE TABLE `x` (
`y` varchar(20) character set utf8 collate utf8_unicode_ci
) ENGINE=MyISAM DEFAULT CHARSET=uft8
На стороне сервера вроде всё.
На стороне клиента используем .NET FM 2003, язык C#:
Дот нет поддерживает UNICODE и предоставляет полный список языков.
Каждый язык представлен базовым языком и территориальными культурами. Параметры языков сосредоточены в объекте CultureInfo.
Идентификатор языка содержится в свойстве LCID.
Так например,
Русский базовый имеет LCID 0x0019
Русский территориальный LCID 0x0419
Испанский имеет 20 различных реализаций,
Английский 14 различных реализаций
Немецкий 6, и т.д. и т.п.
Эти идентификаторы, насколько я понимаю, не имеют ничего общего с поддиапазоном UNICODE...
Внимание вопросы!
1) Как определить по LCID диапазон UNICODE?
2) Как по коду символа UNICODE определить LCID?
3) Как автоматически получить LCID, загрузив UNICODE-текст?
4) Какому LCID соответсвут неразрывная строка UNICODE, в которой присутствуют символы из разных языков? (Например, комбинация греческой "альфа", латинского "-" и русского "самец" = альфа-самец)
5) Зафиксирована-ли вообще ЛОКАЛЬ в локально-написанном тексте UNICODE?
6) Если нет, не придется ли передавать отдельно текст и код локали как независимые параметры серверу/клиенту?
7) К примеру, сохранили мы UNICODE строку в нашей таблице...
Теперь хотим изменить способ сортировки COLLATION... Как определить, какой из коллатионов является наилучшим из национальных для данного текста? Мускульные COLLATION не имеют прямой связи ни с диапазонами в стандартном UNICODE ни с идентификаторами языка в Дот Нете...
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
28331
|
|