2013-12-06 10 views
2

Я прочитал многие связанные темы stackoverflow, и я провел целый день с googleing следующей проблемой, но я не нашел ничего, что могло бы помочь, однако проблема не кажется завершенной.Кодировка клиента Oracle SQL Developer

У меня есть база данных Oracle. Давайте посмотрим на следующий PL/SQL скрипт:

CREATE TABLE Dummy(
    id number(19,0), 
    tclob clob, 
    tnclob nclob, 
    PRIMARY KEY (id)); 

INSERT INTO dummy (id, tclob, tnclob) VALUES (1, 'ñ$ߤ*>;''<’', 'ñ$ߤ*>;''<’'); 
SELECT tclob, tnclob FROM dummy; 

Моя проблема заключается в том, что «N» и «»»символы сохраняются как знак вопроса. Я также попытался загрузить ранее вставленные значения через JAVA, но я получаю вопросительные знаки вместо специальных символов.

Я создал небольшой метод JAVA, который использует OraclePreparedStatement для сохранения тестовых данных, и я использую метод setNString() для присоединения данных nclob к запросу. В этом случае все символы отображаются в JAVA, а также в SqlDeveloper.

Таким образом, возможным решением является использование JAVA для сохранения моих данных в db. У меня есть тысячи строк SQL-скрипт, который вставляет данные, и я не хочу, чтобы все это снова записывалось в java.

Итак, вопрос в том, почему sqldeveloper нарушает специальные символы?

Мои настройки:

SELECT DECODE(parameter, 'NLS_CHARACTERSET', 'CHARACTER SET', 
'NLS_LANGUAGE', 'LANGUAGE', 
'NLS_TERRITORY', 'TERRITORY') name, 
value from v$nls_parameters 
WHERE parameter IN ('NLS_CHARACTERSET', 'NLS_LANGUAGE', 'NLS_TERRITORY') 

Результат:

NAME   VALUE 
------------- ------------- 
LANGUAGE  HUNGARIAN 
TERRITORY  HUNGARY 
CHARACTER SET EE8ISO8859P2 

Я изменил SQLDeveloper/Preferences/Окружающая среда/Кодирование в UTF-8. Я также изменил HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE значение \ KEY_OraDb11g_home1 для HUNGARIAN_HUNGARY.UTF8

Update: Я попытался вставить данные со следующими синтаксисах:

INSERT INTO dummy (id, tclob, tnclob) VALUES (1, N'ñ$ߤ*>;''<’', N'ñ$ߤ*>;''<’'); 
INSERT INTO dummy (id, tclob, tnclob) VALUES (1, 'ñ$ߤ*>;''<’', to_nclob('ñ$ߤ*>;''<’')); 

Ничто не помогало.

Так что я могу сделать?

+0

никто не может помочь? : «( – maestro

+0

Не могли бы вы показать здесь результат этого запроса:' select * from nls_database_parameters где параметр как»% SET'' – krokodilko

+0

Результат вашего запроса: NLS_NCHAR_CHARACTERSET \t AL16UTF16 NLS_CHARACTERSET \t EE8ISO8859P2 – maestro

ответ

3

На ПК, на котором установлена ​​PLSQL, установите значение записи NLS_LANG, равное значению operation system locale (code page) компьютера, эквивалентное значение.

How to detect operating system language locale?
How to map OS locale to NLS_LANG value?

При использовании PLSQL начальный параметр клиента языка, который необходим для создания сеанса Oracle считывается из реестра NLS_LANG.

Due to Oracle documents, недействительные данные обычно встречаются в базе данных, так как параметр NLS_LANG установлен неправильно на клиенте. Значение NLS_LANG должно отражать клиентский код с кодом системы.
Например, в английской среде Windows кодовая страница WE8MSWIN1252. Когда параметр NLS_LANG установлен правильно, база данных может автоматически конвертировать входящие данные из клиентской операционной системы в ее кодировку.

При использовании JAVA-метода параметр клиентского языка задается значением из панели управления в разделе «Язык и региональные стандарты», поэтому все будет в порядке.

+0

Спасибо за ваш ответ. Значит ли это, что я не могу изменить кодировку sqldeveloper, чтобы иметь правильную кодировку? – maestro

+0

Определенно вы можете. Просто установите запись в реестре равной вашей операционной системе. Например, если это английский -Установить значение AMERICAN _AMERICA.WE8MSWIN1252, а затем перезапустите. Дайте мне знать, что произойдет –

+0

Спасибо, завтра днем, я попробую и отвечу своими результатами. – maestro

Смежные вопросы