Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
 Какая коллация используется в вашей СУБД по умолчанию ?  [new]
Таблоид
Member

Откуда:
Сообщений: 9456
Блог
hi all

Знак подчеркивания (ascii=95) может при сортировке выскочить "выше" цифр только при использовании специальной коллации, устанавливаемой на уровне БД или указанной внутри кляузы order by - я прав ?
Если да, то:
1) что должно выводиться раньше ("выше") в MS SQL 2005 XE, если select databasepropertyex('my_test, 'Collation') возвращает строку "Cyrillic_General_CI_AS" ?
2) то же самое, в ORACLE 10 XE, если select value from nls_session_parameters where parameter in ('NLS_COMP') возвращает строку "BINARY" ?

Почему-то получаю в обеих СУБД следующий порядок вывода:
MS SQL 2005 XE:
select ch,ascii(ch) ch_asc from(
  select '2' ch union all
  select '5' ch union all
  select '0' ch union all
  select '_' 
) t
order by ch
chch_asc
_95
048
250
553

ORACLE 10 XE:
select ch,ascii(ch) ch_asc 
from(
    select '2' ch from dual union all
    select '5' ch from dual union all
    select '0' ch from dual union all
    select '_' from dual
) t
order by ch
- результат как в MS SQL.

Тогда как:
FIREBIRD 2.5:
select ch,ascii_val(ch) ch_asc from(
  select '2' ch from rdb$database union all
  select '5' ch from rdb$database union all
  select '0' ch from rdb$database union all
  select '_' from rdb$database
) t
order by ch
CHCH_ASC
048
250
553
_95
2 дек 11, 10:46    [11694118]     Ответить | Цитировать Сообщить модератору
 Re: Какая коллация используется в вашей СУБД по умолчанию ?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
select ch,ascii(ch) ch_asc from(
  select '2' ch union all
  select '5' ch union all
  select '0' ch union all
  select '_' 
) t
order by ch COLLATE Cyrillic_General_BIN


ch   ch_asc
---- -----------
0 48
2 50
5 53
_ 95

(4 row(s) affected)
2 дек 11, 11:01    [11694235]     Ответить | Цитировать Сообщить модератору
 Re: Какая коллация используется в вашей СУБД по умолчанию ?  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
Таблоид,

+ Ктож на таких простых данных коллации (что бы это слово не значило) проверяет...
select ch,ascii(ch) ch_asc from(
  select '1ё' ch union all
  select '11' ch union all
  select '1а' ch union all
  select 'ё1' ch union all
  select 'а1' ch union all
  select '+1' ch union all
  select '-1' ch union all
  select '+а' ch union all
  select '-а' ch union all
  select '+ё' ch union all
  select '-ё' ch union all
  select '_' 
) t
order by ch
2 дек 11, 13:14    [11695655]     Ответить | Цитировать Сообщить модератору
 Re: Какая коллация используется в вашей СУБД по умолчанию ?  [new]
Yo.!
Guest
Таблоид,

10.2.0.4 SE и 11g XE выдают так:
SQL> select value from nls_session_parameters where parameter in ('NLS_COMP') ;

VALUE
--------------------------------------------------------------------------------
BINARY

select ch,ascii(ch) ch_asc
from(
    select '2' ch from dual union all
    select '5' ch from dual union all
    select '0' ch from dual union all
    select '_' from dual
) t
  8  order by ch ;

C     CH_ASC
- ----------
0         48
2         50
5         53
_         95
2 дек 11, 13:19    [11695702]     Ответить | Цитировать Сообщить модератору
 Re: Какая коллация используется в вашей СУБД по умолчанию ?  [new]
Ёш
Member

Откуда:
Сообщений: 2892
Таблоид,

postgres использует системные локали для сортировки, по умолчанию в Debian при установке postgres настраивается на локаль «по умолчанию» из /etc/default/locale, а /etc/default/locale инициализируется при установке системы по результатам ответов на конфигурационные вопросы пакета locales так что по умолчанию у меня локаль ru_RU.UTF-8:
select ch,ascii(ch) ch_asc from(
  select '2' ch union all
  select '5' ch union all
  select '0' ch union all
  select '_' 
) t
order by ch
 ch | ch_asc 
----+--------
 _  |     95
 0  |     48
 2  |     50
 5  |     53
(4 rows)

select ch,ascii(ch) ch_asc from(
  select '2' ch union all
  select '5' ch union all
  select '0' ch union all
  select '_' 
) t
order by ch collate "POSIX";
 ch | ch_asc 
----+--------
 0  |     48
 2  |     50
 5  |     53
 _  |     95
(4 rows)
2 дек 11, 15:48    [11697164]     Ответить | Цитировать Сообщить модератору
 Re: Какая коллация используется в вашей СУБД по умолчанию ?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54772

Ёш
postgres использует системные локали для сортировки

А при этом используются локали клиента или сервера?

Posted via ActualForum NNTP Server 1.4

2 дек 11, 16:02    [11697334]     Ответить | Цитировать Сообщить модератору
 Re: Какая коллация используется в вашей СУБД по умолчанию ?  [new]
Ёш
Member

Откуда:
Сообщений: 2892
Dimitry Sibiryakov
Ёш
postgres использует системные локали для сортировки

А при этом используются локали клиента или сервера?
Сервера конечно. Как же он с клиента локали скачает? Они же могут не совпасть бинарно, типа сервер i386 а клиент ARM или IA64 :)
2 дек 11, 16:34    [11697646]     Ответить | Цитировать Сообщить модератору
 Re: Какая коллация используется в вашей СУБД по умолчанию ?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54772

Ёш
Сервера конечно. Как же он с клиента локали скачает? Они же могут не совпасть бинарно,
типа сервер i386 а клиент ARM или IA64 :)

Т.е. клиент совсем никак не может повлиять на порядок сортировки набора данных (а так же
прочие вещи, определяемые коллейтом) и всё зависит от воли админа?..

Posted via ActualForum NNTP Server 1.4

2 дек 11, 17:22    [11697998]     Ответить | Цитировать Сообщить модератору
 Re: Какая коллация используется в вашей СУБД по умолчанию ?  [new]
Ёш
Member

Откуда:
Сообщений: 2892
Dimitry Sibiryakov
Ёш
Сервера конечно. Как же он с клиента локали скачает? Они же могут не совпасть бинарно,
типа сервер i386 а клиент ARM или IA64 :)

Т.е. клиент совсем никак не может повлиять на порядок сортировки набора данных (а так же
прочие вещи, определяемые коллейтом) и всё зависит от воли админа?..
Эээ... я не совсем понимаю о чём Вы спрашиваете :) Начиная с 9.1 локаль можно привязывать прямо к выражению в запросе или к полю таблицы, но если администратор операционной системы не создал заранее нужные локали в ОС, DBA удалённо через консоль СУБД их не добавит.

В Windows насколько я знаю всегда есть все возможные локали, в RedHat по моему тоже почти все локали автоматом компилируются. В Debian нужно выбирать при установке, компилировать все или только какие-то конкретные.
2 дек 11, 17:43    [11698102]     Ответить | Цитировать Сообщить модератору
 Re: Какая коллация используется в вашей СУБД по умолчанию ?  [new]
Ёш
Member

Откуда:
Сообщений: 2892
Ёш
Начиная с 9.1 локаль можно привязывать
Локаль — это я слишком громко сказал, только COLLATE конечно.
2 дек 11, 17:48    [11698129]     Ответить | Цитировать Сообщить модератору
Все форумы / Сравнение СУБД Ответить