Кодировка среды Oracle SQL Developer - PullRequest
7 голосов
/ 09 марта 2012

У меня Oracle SQL Developer (3.1.07), и я пытаюсь работать с базой данных, которая использует WE8ISO8859P1 кодировку:

SELECT * FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';

У меня проблемы с сохранением пакетов, содержащих символы Юникода. Когда я открываю ранее сохраненный пакет, все символы Юникода превращаются в '¿'.

Какие настройки мне нужно изменить, чтобы SQL Developer сохранил эти символы? Я пытался установить кодировку среды на 'ISO-8859-15' и некоторые другие кодировки, но это не поможет.

Ответы [ 4 ]

1 голос
/ 11 августа 2017

Если ваша база данных кодирует текст в однобайтовую кодировку не в Юникоде (например, ISO-8859), любой символ, отсутствующий в таблице символов, будет считаться недействительным и заменяться заполнителем.Вы не можете вернуться к этому, информация потеряна.

Это обычно можно обойти при хранении данных, но что касается исходного кода, вы не можете контролировать, как Oracle будет кодировать ваши строки.

Если ваша база данных настроена на использование такой схемы кодирования, вы, вероятно, не должны писать код, который нарушает ее правила.

0 голосов
/ 27 января 2014

По крайней мере, чтобы открыть PKG в sql developer, вы можете быстро попробовать и посмотреть, работает ли он: -

Измените кодировку SQL Developer на «unicode-utf-8», которая по умолчанию установлена ​​позже.версии сейчас.

В конечном итоге вам потребуется перейти на перенос кодировки базы данных в 'AL32UTF8', чтобы избежать других проблем (например, данных) из-за этого набора символов.

0 голосов
/ 22 марта 2016

Если вы посмотрите на USER_SOURCE, то увидите, что исходный код, сохраненный / интерпретированный базой данных, будет находиться в столбце VARCHAR2, поэтому используйте набор символов базы данных. Таким образом, ваш исходный код должен быть в WE8ISO8859P1.

Теоретически, если клиент и база данных используют один и тот же набор символов, тогда база данных не будет пытаться выполнить какой-либо перевод набора символов, и вы сможете прокрасться в последовательности байтов, которые база данных считает WE8ISO8859P1, но будет иметь смысл в Unicode. Однако в какой-то момент кто-то использует не тот клиент, и он сломается.

Вам не нужен юникод для идентификаторов и т. Д. В коде, поэтому я предполагаю, что это строковые литералы. Вам лучше хранить их в таблице (столбец NVARCHAR2) и выбирать их в коде, а не жестко их кодировать. Если это невозможно, вы можете использовать UNISTR и жестко закодировать соответствующие шестнадцатеричные значения.

0 голосов
/ 09 марта 2012

Возможно, вам может понадобиться миграция этого набора символов

http://docs.oracle.com/cd/B10501_01/server.920/a96529/ch10.htm#1656

в документации Oracle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...