Как конвертировать набор символов столбца в Oracle - PullRequest
5 голосов
/ 14 марта 2011

У меня есть таблица, в которую наш поставщик услуг вставляет данные UNICODE, но мой набор символов оракула - WE8ISO8859P1.

Теперь, чтобы получить эти данные, я использовал следующую функцию оракула, но она отображает ???????

выберите CONVERT (сообщение 'AL32UTF8', 'WE8ISO8859P1') из client_campaigns

еще одно сообщение coulmn имеет тип CLOB.

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

Теперь, пожалуйста, укажите, как я могу получить эти данные в формате UNICODE?

С уважением, imran

1 Ответ

8 голосов
/ 14 марта 2011

Строки, вставленные в символьный столбец (VARCHAR2 или CHAR или CLOB), всегда будут преобразованы в набор символов базы данных. Это означает, что вставленные данные преобразуются в WE8ISO8859P1 в вашем случае. Поскольку UNICODE не является подмножеством WE8ISO8859P1, вы потеряете информацию. Некоторые символы, недоступные в вашем наборе символов, преобразуются в ? при вставке.

Что делать? Есть несколько вариантов новых данных:

  1. Измените тип данных столбца на NVARCHAR2 вместо VARCHAR2 (или NCLOB вместо CLOB). NVARCHAR2 специально разработан для того, чтобы вы могли обрабатывать многобайтовые символы без изменения основного набора символов БД. См. этот SO вопрос для различий между VARCHAR2 и NVARCHAR2). Также учтите, что некоторые приложения могут работать некорректно с NVARCHAR2 .
  2. Вы можете изменить столбец в RAW или BLOB и записать непосредственно вашу строку в виде двоичного потока. Когда вы прочитаете это снова, это будут все еще данные UNICODE. Однако базе данных будет сложно что-либо сделать с данными этого столбца: сортировка будет двоичной, поиск будет проблематичным, поскольку вы не сможете правильно использовать оператор LIKE.
  3. Если у вас много входных данных UNICODE, вы можете подумать об изменении набора символов вашей базы данных. Это будет самый дорогой вариант (вам, вероятно, потребуется экспортировать / переустановить / импортировать), но после этого все ваши столбцы будут иметь правильный тип данных.

Я бы выбрал вариант (1) или (3), если бы у меня был выбор. Работа с RAW отключает множество функций и добавляет сложности.

Очевидно, что предыдущие данные будет невозможно восстановить только с данными, доступными для базы данных: вам придется повторно импортировать старые данные в новую структуру.

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