Подчертаване на Oracle: Редът на резултатите от JDBC заявката в Linux е различен от този в MAC-OS или Windows

Имам ТАБЛИЦА с две колони:

ID ОПИСАНИЕ
1 първи ред
2 втори ред
3 _
4 1 първи цифров ред

и аз имам запитване

SELECT * FROM TABLE ORDER BY DESCRIPTION

Проблемът е, че извличам различен резултат в зависимост от машината, на която изпълнявам кода. Ако стартирам кода на

  • linux (centos) Получавам следния резултат
    ID ОПИСАНИЕ
    4 1 първи цифров ред
    3 _
    1 първи ред
    2 втори ред

  • windows (7) Получавам следния резултат
    ID ОПИСАНИЕ
    3 _
    1 първи ред
    2 втори ред< br/> 4 1 първи цифров ред

  • MAC OS (Snow Leopard) получавам следния резултат
    ID ОПИСАНИЕ
    3 _
    1 първи ред
    2 секунда ред
    4 1 първи цифров ред

Както можете да видите, долната черта "_" се третира различно в зависимост от машината, на която изпълнявам заявката :(.
Това проблем на драйвера ли е? Защо не получавам същия резултат?


person duderoot    schedule 02.08.2012    source източник
comment
Може би проблем със средата от страна на клиента, задаващ различен NLS_LANG или NLS_SORT в сесията? Би било хубаво, ако можете да изпълните заявката от sqlplus и в двете среди, да видите дали резултатът е същият и ако е така, опитайте отново със същия набор за промяна на сесията nls_lang... в двете среди преди заявката.   -  person Glenn    schedule 03.08.2012
comment
Предполагам, че базата данни е централизирана и всички клиенти се обаждат на една и съща база данни?   -  person MadProgrammer    schedule 03.08.2012
comment
Вижте документацията за повече относно коментара на Глен . Вашият локал на Java засяга тази настройка; вижте този въпрос например.   -  person Alex Poole    schedule 03.08.2012


Отговори (2)


10x за подсказките. Наистина проблемът беше с настройката на locale, имах:

  • на линукс

    LANG=en_US.UTF-8

    LC_CTYPE="en_US.UTF-8"

  • на mac

    LANG=de_DE.UTF-8

    LC_CTYPE="de_DE.UTF-8"

След като зададох locale на машина с linux на немски utf-8, имах същия резултат на linux, както на другата машина (mac и windows) и сега компилацията е стабилна :).

Ще се опитам да си поиграя с конфигурацията на NLS_LANG, за да мога да задам локала на Linux машината обратно на английски utf-8.

person duderoot    schedule 03.08.2012

Редът зависи от вашите NLS настройки. Вижте настройката NLS_LANG и NLS_SORT. Ако предоставите една и съща NLS настройка във всички среди, редът ще бъде същият.

Можете също да посочите изрично поръчката:

SELECT * 
  FROM TABLE 
 ORDER BY NLSSORT(Description, 'NLS_SORT = BINARY')

Очаквам, че производителността на сортирането не е важна тук, защото заявката може да не използва индекса на колоната с описание, ако колоната е индексирана.

person Grzegorz Kazior    schedule 22.09.2016