Моя основная проблема заключается в том, что у меня есть пользователи с разными локалями, использующие базу данных, и я хочу, чтобы они сортировали элементы в их родном порядке.
Насколько я понимаю, это работает следующим образом:
Когда я создаю базу данных, мне нужно решить:
Кодировка символов (ISO, Unicode, кодовая страница и т. Д.):
Это ограничивает количество символов, которые можно поместить в базу данных
Физическое хранилище (двоичное, UTF-8, порядковый номер UCS16 и т. Д.):
Это то, что я доверяю базе данных, чтобы заботиться о
Равенствосравнение:
Это необходимо, чтобы уникальные ограничения и т. д. работали согласованно в базе данных.Обычно мне нужно только определить нечувствительность к регистру ("a" = "A") и акценты (è = e). Будет ли здесь иметь значение локаль?
Все эти вещи (+ порядок сортировки по умолчанию) устанавливаются путем указания параметров сортировки для каждого поля (где значение по умолчанию берется из базы данных, котораяполучает значение по умолчанию из экземпляра)
Когда соединение установлено с базой данных, языковой параметр входа в систему определяет, как отображаются даты и числа и т. д.
Здесь возникают проблемы. Почему порядок сортировки не зависит от локали соединения? Я могу понять, что сравнение на равенство должно соответствовать спецификации поля, но порядок сортировки?
Я знаю, что могу сделать ORDER BY [Name] COLLATE somecollation
но есть несколько проблем с этим:
- Легко забыть
- SQL часто генерируется инструментом / фреймворком
- Откуда я знаю, чтосличение указать?
Как вы обычно справляетесь с этим?Сортировка на стороне клиента?