Проблема со специальными символами в базе данных Oracle - PullRequest
1 голос
/ 16 мая 2019

Мне нужно обновить значение в одной таблице, которая имеет специальный символ. Ниже приведен запрос на обновление, который я выполнил:

    UPDATE TABLE_X
        SET DISPLAY_NAME = 'AC¦', NATIVE_IDENTITY='AC¦'
        WHERE ID='idNumber'

Специальный символ "¦" не обновляется в Oracle.

Я уже попробовал следующие подходы:

  1. Проверено использование набора символов в Oracle с помощью запроса ниже
    select * from nls_database_parameters  where parameter='NLS_CHARACTERSET';

Имеет набор символов "US7ASCII".

  1. Я пытался увидеть, поможет ли какой-либо из наборов символов использовать запрос ниже
   SELECT CONVERT('¦ ', 'ASCII') FROM DUAL; 

Я пробовал ниже другую кодировку:

  • WE8MSWIN1252
  • AL32UTF8
  • BINARY - при этом выдается ошибка «ORA-01482: неподдерживаемый набор символов»

Перед изменением набора символов в БД я хотел опробовать функцию 'CONVERT' из Oracle, но вышеупомянутый набор символов либо возвращает символ "Block Symbol", либо "QuestionMark ".

Есть идеи, как включить этот специальный символ в БД?

1 Ответ

1 голос
/ 16 мая 2019

Предполагая, что рассматриваемый символ не является частью набора символов US7ASCII , который, по-видимому, не будет отображаться, если вы не хотите заменить его на символ вертикальной черты ASCII |, вы не можете правильно сохранить символ в столбце VARCHAR2 в базе данных.

  • Вы можете изменить набор символов базы данных на набор символов, который поддерживает все символы, которые вы хотите представить
  • Вы можете изменить тип данных столбца на NVARCHAR2, предполагая, что ваш национальный набор символов - UTF-16, который обычно был бы.
  • Вы можете сохранить двоичное представление символа в некотором известном вам наборе символов в столбце RAW и преобразовать его обратно из двоичного представления в логику вашего приложения.

Я бы предпочел изменить набор символов базы данных, но это потенциально существенное изменение.

...