Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема с кодировкой Oracle при запросе SELECT ... LIKE. / 20 сообщений из 20, страница 1 из 1
03.02.2012, 02:10:51
    #37645030
ArthaZz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой Oracle при запросе SELECT ... LIKE.
Вот кусок из Java класса:
Код: java
1.
2.
3.
st = conn.prepareStatement("SELECT NAME FROM ADDRESSES WHERE NAME LIKE ?");
String query = ""; // Тут часть слова на латинице или кириллице
st.setString(1, query+"%");


Если в query использовать латинские сиволы, то все работает. Если же в query использовать русские символы то запрос не проходит, ничего не возвращается. Если выполнить этот же запрос (с русскими символами) через SQL Command line, то все ок!
Есть подозрение что проблема с кодировкой.
БД Oracle 11g XE. Кодировка в БД - NLS_CHARACTERSET: AL32UTF8.
...
Рейтинг: 0 / 0
03.02.2012, 07:32:35
    #37645102
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой Oracle при запросе SELECT ... LIKE.
ArthaZz,

Сменить кодировку форуме бд
...
Рейтинг: 0 / 0
03.02.2012, 10:29:48
    #37645242
crazy_hands
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой Oracle при запросе SELECT ... LIKE.
ArthaZzВот кусок из Java класса:
Код: java
1.
2.
3.
st = conn.prepareStatement("SELECT NAME FROM ADDRESSES WHERE NAME LIKE ?");
String query = ""; // Тут часть слова на латинице или кириллице
st.setString(1, query+"%");


Если в query использовать латинские сиволы, то все работает. Если же в query использовать русские символы то запрос не проходит, ничего не возвращается. Если выполнить этот же запрос (с русскими символами) через SQL Command line, то все ок!
Есть подозрение что проблема с кодировкой.
БД Oracle 11g XE. Кодировка в БД - NLS_CHARACTERSET: AL32UTF8.

Вы используете библиотеки oracle.jdbc или java.sql?
...
Рейтинг: 0 / 0
03.02.2012, 12:49:36
    #37645547
ArthaZz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой Oracle при запросе SELECT ... LIKE.
Вы используете библиотеки oracle.jdbc или java.sql?
java.sql
...
Рейтинг: 0 / 0
03.02.2012, 13:02:20
    #37645582
Miha_S7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой Oracle при запросе SELECT ... LIKE.
ArthaZz,

а сам файл исходника класса у вас в какой кодировке? С какими параметрами компилите класс?
...
Рейтинг: 0 / 0
03.02.2012, 14:00:50
    #37645757
crazy_hands
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой Oracle при запросе SELECT ... LIKE.
Miha_S7ArthaZz,

а сам файл исходника класса у вас в какой кодировке? С какими параметрами компилите класс?

Используйте работая с ораклом oracle.jdbc. Оракл специально для Вас написал. Раньше использовал java.sql и сталкивался с затыками, теперь с oracle.jdbc.
У меня БД тоже с кодировкой AL32UTF8 и передаю из джава (компиляция класса в cp1521) параметры в кириллице без проблем.
...
Рейтинг: 0 / 0
03.02.2012, 14:06:51
    #37645774
svenom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой Oracle при запросе SELECT ... LIKE.
crazy_handsMiha_S7ArthaZz,
а сам файл исходника класса у вас в какой кодировке? С какими параметрами компилите класс?
Используйте работая с ораклом oracle.jdbc. Оракл специально для Вас написал. Раньше использовал java.sql и сталкивался с затыками, теперь с oracle.jdbc.
У меня БД тоже с кодировкой AL32UTF8 и передаю из джава (компиляция класса в cp1521) параметры в кириллице без проблем.Разумеется, надо всеми силами стремиться не использовать oracle.jdbc, а работать через интерфейсы java.sql, ибо oracle.jdbc пишется не для прикладных программистов. Это просто реализация JDBC с которой программист должен работать через ... интерфейс JDBC
...
Рейтинг: 0 / 0
03.02.2012, 14:23:49
    #37645813
ArthaZz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой Oracle при запросе SELECT ... LIKE.
Когда создавал тему БД заполнялась с использованием русских символов из SQL*Plus. Я заметил, если заполнять БД из java, то она нормально читается, если SELECT делать также в java (при этом LIKE работает на ура!). Однако в этом случае через SQL*Plus при SELECT'е выдает набор непонятных символов. В итоге пока нашел только один выход: заполнять и считывать БД только через java код.
...
Рейтинг: 0 / 0
03.02.2012, 14:33:34
    #37645833
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой Oracle при запросе SELECT ... LIKE.
ArthaZzSQL*Plus при SELECT'е выдает набор непонятных символов
3 настройки:
1 В реестре
SET NLS_LANG___RUSSIAN_CIS.RU8PC866 или другие
2. Пр. клик на чёрном окне :) - шрифт
3. перед sqlplus -
chcp 1251
...
Рейтинг: 0 / 0
03.02.2012, 14:37:02
    #37645843
ArthaZz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой Oracle при запросе SELECT ... LIKE.
Также читал, что можно использовать в БД поля типа NVARCHAR2 и свойство oracle.jdbc.defaultNChar (для отправки данных из Java). Подходит ли это к моему случаю?
...
Рейтинг: 0 / 0
03.02.2012, 14:46:42
    #37645863
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой Oracle при запросе SELECT ... LIKE.
ArthaZzТакже читал, что можно использовать в БД поля типа NVARCHAR2 и свойство oracle.jdbc.defaultNChar (для отправки данных из Java). Подходит ли это к моему случаю?
выложи сюда:
Код: sql
1.
select * from NLS_Session_Parameters


если не вдаваться в подробности, то лучше СРАЗУ иметь в БД русскую кодировку.
Чтобы серверу легче и не конвертить с китайского на русский на лету.

2.
параметр NLS_LENGTH_SEMANTICS BYTE

(Определяет способ задания длины символьных столбцов. По умолчанию – Byte, т.е. VARCHAR2(10) означает 10 байт. Значение Char меняет трактовку с байт на символы. Не влияет на уже существующие столбцы, только на новые.)
...
Рейтинг: 0 / 0
03.02.2012, 14:54:45
    #37645877
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой Oracle при запросе SELECT ... LIKE.
да, запрос забыл:

Код: sql
1.
select * from nls_database_parameters



PARAMETER VALUE
1 NLS_LANGUAGE RUSSIAN
2 NLS_TERRITORY RUSSIA
3 NLS_CURRENCY ?.
4 NLS_ISO_CURRENCY RUSSIA
5 NLS_NUMERIC_CHARACTERS ,
6 NLS_CHARACTERSET CL8MSWIN1251
7 NLS_CALENDAR GREGORIAN
8 NLS_DATE_FORMAT DD.MM.RR
9 NLS_DATE_LANGUAGE RUSSIAN
10 NLS_SORT RUSSIAN
11 NLS_TIME_FORMAT HH24:MI:SSXFF
12 NLS_TIMESTAMP_FORMAT DD.MM.RR HH24:MI:SSXFF
13 NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
14 NLS_TIMESTAMP_TZ_FORMAT DD.MM.RR HH24:MI:SSXFF TZR
15 NLS_DUAL_CURRENCY ?.
16 NLS_COMP BINARY
17 NLS_LENGTH_SEMANTICS BYTE
18 NLS_NCHAR_CONV_EXCP FALSE
19 NLS_NCHAR_CHARACTERSET AL16UTF16
20 NLS_RDBMS_VERSION 10.2.0.1.0

2. Ставим клиента Oracl (всё по умолчанию)
На клиенте в реестре NLS_LANG = RUSSIAN_CIS.CL8MSWIN1251

= будут работать с клиента русская сортировка и запятые русские поймёт как разделитель (на всякий :) )
...
Рейтинг: 0 / 0
03.02.2012, 15:40:29
    #37645996
ArthaZz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой Oracle при запросе SELECT ... LIKE.
Код: plsql
1.
select * from NLS_Session_Parameters


NLS_LANGUAGE
RUSSIAN
NLS_TERRITORY
RUSSIA
NLS_CURRENCY
р.
NLS_ISO_CURRENCY
RUSSIA
NLS_NUMERIC_CHARACTERS
,
NLS_CALENDAR
GREGORIAN
NLS_DATE_FORMAT
DD.MM.RR
NLS_DATE_LANGUAGE
RUSSIAN
NLS_SORT
RUSSIAN
NLS_TIME_FORMAT
HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT
DD.MM.RR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT
HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT
DD.MM.RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY
р.
NLS_COMP
BINARY
NLS_LENGTH_SEMANTICS
BYTE
NLS_NCHAR_CONV_EXCP
FALSE

17 rows selected.

Код: plsql
1.
select * from nls_database_parameters


NLS_LANGUAGE
AMERICAN
NLS_TERRITORY
AMERICA
NLS_CURRENCY
$
NLS_ISO_CURRENCY
AMERICA
NLS_NUMERIC_CHARACTERS
.,
NLS_CHARACTERSET
AL32UTF8
NLS_CALENDAR
GREGORIAN
NLS_DATE_FORMAT
DD-MON-RR
NLS_DATE_LANGUAGE
AMERICAN
NLS_SORT
BINARY
NLS_TIME_FORMAT
HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT
DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT
HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT
DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY
$
NLS_COMP
BINARY
NLS_LENGTH_SEMANTICS
BYTE
NLS_NCHAR_CONV_EXCP
FALSE
NLS_NCHAR_CHARACTERSET
AL16UTF16
NLS_RDBMS_VERSION
11.2.0.2.0

20 rows selected.

Не подскажите где менять NLS_LANG в Windows 7 (Oracle 11.2). Что-то не могу его обнаружить в HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\NLS_LANG.
...
Рейтинг: 0 / 0
03.02.2012, 15:47:02
    #37646012
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой Oracle при запросе SELECT ... LIKE.
ArthaZz,
ORA_HOME ветка есть? Или какая есть?
Эту ветку ставит не оракл, а его клиент (заодно с sqlplus).
...
Рейтинг: 0 / 0
03.02.2012, 15:48:27
    #37646020
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой Oracle при запросе SELECT ... LIKE.
Petro123,
если в java коннект this то это ветка не нужна. Она для твоих крякозябл в плюсе
...
Рейтинг: 0 / 0
03.02.2012, 15:50:08
    #37646023
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой Oracle при запросе SELECT ... LIKE.
да, и HKEY_LOCAL_MACHINE - если ставил от админа в виндах
...
Рейтинг: 0 / 0
03.02.2012, 15:56:21
    #37646047
crazy_hands
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой Oracle при запросе SELECT ... LIKE.
svenomcrazy_handsпропущено...

Используйте работая с ораклом oracle.jdbc. Оракл специально для Вас написал. Раньше использовал java.sql и сталкивался с затыками, теперь с oracle.jdbc.
У меня БД тоже с кодировкой AL32UTF8 и передаю из джава (компиляция класса в cp1521) параметры в кириллице без проблем.Разумеется, надо всеми силами стремиться не использовать oracle.jdbc, а работать через интерфейсы java.sql, ибо oracle.jdbc пишется не для прикладных программистов. Это просто реализация JDBC с которой программист должен работать через ... интерфейс JDBC

Разрабатывая для БД оракл и используя на серверах приложения оракл или прочих где есть библиотека oracle.jdbc лучше пользоваться ею и это избавит от некоторых гемороев.
...
Рейтинг: 0 / 0
03.02.2012, 16:01:30
    #37646059
svenom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой Oracle при запросе SELECT ... LIKE.
crazy_handsРазрабатывая для БД оракл и используя на серверах приложения оракл или прочих где есть библиотека oracle.jdbc лучше пользоваться ею и это избавит от некоторых гемороев.Верно, но это надо делать как можно реже. А лучше - вообще не делать.
...
Рейтинг: 0 / 0
03.02.2012, 16:29:53
    #37646131
Pavel Kurakin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой Oracle при запросе SELECT ... LIKE.
ArthaZzНе подскажите где менять NLS_LANG в Windows 7 (Oracle 11.2). Что-то не могу его обнаружить в HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\NLS_LANG.
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home1\NLS_LANG
...
Рейтинг: 0 / 0
03.02.2012, 17:18:01
    #37646250
crazy_hands
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодировкой Oracle при запросе SELECT ... LIKE.
svenomcrazy_handsРазрабатывая для БД оракл и используя на серверах приложения оракл или прочих где есть библиотека oracle.jdbc лучше пользоваться ею и это избавит от некоторых гемороев.Верно, но это надо делать как можно реже. А лучше - вообще не делать.

svenom, Вы так и не ответили почему? Я не пойму, аргументы можно привести?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема с кодировкой Oracle при запросе SELECT ... LIKE. / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]