Работа с русскими кодовыми страницамиИсточник: sgml
Не все сервера баз данных обеспечивают правильную работу с русскими буквами. В большинстве случаев проблема сводится к довольно незначительным, но досадным ошибкам: 1. Не работают функции Upper и Lower. 2. Символы сортируются в порядке текущей кодовой страницы (WIN1251), т.е. "ЁёАБВ...Яабв...я" Решить первую проблему очень легко, если сервер поддерживает функцию TRANSLATE. Например, для PostgreSQL (имеется ввиду стандартная сборка из комплекта cygwin, в то время как правильно собранный сервер и сам нормально работает с русскими кодировками) это будет выглядеть примерно так: CREATE FUNCTION "w_upper"("varchar") RETURNS "varchar" AS ' SELECT TRANSLATE($1, ''abcdefghijklmnopqrstuvwxyzёабвгдежзийклмнопрстуфхцчшщъыьэюя'', ''ABCDEFGHIJKLMNOPQRSTUVWXYZЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'') ' LANGUAGE 'sql'; CREATE FUNCTION "w_lower"("varchar") RETURNS "varchar" AS ' SELECT TRANSLATE($1, ''ABCDEFGHIJKLMNOPQRSTUVWXYZЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'', ''abcdefghijklmnopqrstuvwxyzёабвгдежзийклмнопрстуфхцчшщъыьэюя'') ' LANGUAGE 'sql'; Вторую задачу можно решить как минимум двумя способами, суть которых заключается в том, чтобы не дать Access'у перестроить запрос к серверу и таким способом заставить его включить свой собственный механизм сортировки. 1. Необходимо создать запрос к серверу, который возвращал бы нужные записи. Далее, на основе этого запроса создать обычный запрос, в котором указать требуемый порядок сортировки. Разумеется, такой запрос будет необновляемым. 2. Создать обычный запрос на основе присоединенной таблицы сервера, в котором задать сортировку по выражению, например "ORDER BY "" & MyTable.MyField". Такой запрос будет обновляемым, если тому не препятствуют обычные ограничения. |