SQL Server 2005: нужен совет по обработке многоязычных данных в одном столбце таблицы - PullRequest
2 голосов
/ 18 июля 2009

Я использую SQL Server 2005 и .Net 2.0. У меня есть несколько таблиц, которые должны хранить данные на нескольких языках в одном столбце. Например. таблица Article с ArticleID (идентификатор) и ArticleName (nvarchar 100) Данные в ArticleName могут быть на разных языках.

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

Каждый пользователь в моем приложении может выбрать предпочитаемую им культуру. В пользовательском интерфейсе данные товаров отображаются в сетке данных, и пользователь может сортировать их по ArticleName.

В данный момент порядок сортировки неверный из-за сопоставления моей базы данных. Я подумываю об этом, используя предложение ORDER BY ... COLLATE. Но как мне сопоставить правильную пользовательскую культуру с сопоставлением SQL Server? Нужно ли указывать для каждой культуры, как это - например. если культура = z-CN (китайский КНР), используйте сопоставление Chinese_PRC_CI_AS и так далее ...

Есть ли лучший способ получить параметры сортировки? Мой подход правильный? Или есть лучший способ справиться с этим? (Я действительно думал о том, чтобы выполнить сортировку в .Net, но это кажется пустой тратой процессорного времени.) Спасибо за чтение.

1 Ответ

2 голосов
/ 18 июля 2009

SQL Server 2005 имеет табличную функцию fn_helpcollations (), которая возвращает все поддерживаемые параметры сортировки:

select *, 
COLLATIONPROPERTY(name, 'CodePage') as CodePage,
COLLATIONPROPERTY(name, 'LCID') as LCID,
COLLATIONPROPERTY(name, 'ComparisonStyle') as ComparisonStyle,
COLLATIONPROPERTY(name, 'Version') as Version
from fn_helpcollations()

В этой статье MSDN подробно рассматриваются параметры сортировки SQL Server:

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

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

Я предлагаю вам создать пользовательскую таблицу сопоставлений SQL с языками, которые вы поддерживаете для своих пользователей, извлечь сопоставление пользователей из этой таблицы сопоставлений и использовать ORDER BY COLLATE, как вы и предполагали.

...