преобразование utf-8 в utf-16 в оракуле - PullRequest
0 голосов
/ 17 августа 2011

Я фактически хранил ресурсы в БД в формате UTF-8.Но когда я хочу конвертировать их все в UTF-16 сейчас.Поскольку в немецком языке есть некоторые символы, такие как 1/4.Теперь я хочу избежать этого.Я пытался с последующим оператором, но получил несколько полей в строке результата ....

> select convert('Inhalt hinzufügen','AL16UTF16LE','AL32UTF8') from dual
  result : it is not allowing me to copy paste it :(. But result is coming properly except boxes in middle of each character

есть ли альтернативный подход?

SELECT *
  FROM v$nls_parameters
 WHERE parameter LIKE '%CHARACTERSET';

указывает, что мой набор символов базы данныхWE8MSWIN1252, в то время как мой национальный набор символов - AL32UTF16.

Когда я использую функцию DUMP для просмотра данных, которые фактически хранятся в моей таблице, это вывод:

SELECT dump( your_column, 1016 ), your_column
  FROM your_table
 WHERE some_key_column = <<value that gives you the row you're interested in>>

Typ = 1 Len = 54 CharacterSet = WE8MSWIN1252: 4d, c3, b6,63,68,74,65,6e, 20,53,69,65,20,64,69,65,73,65,20,5а, 65,69,6c, 65,20,77,69, 72,6b, 6c, 69,63,68,20,65,6e, 64,67, с3, BC, 6c, 74,69,67, 20,6c, c3, b6,73,63,68,65,6e, 3f, Мехтен Сие диезе Цайле Вирклих эндгюльтиг Люшен?

1 Ответ

1 голос
/ 17 августа 2011

Поскольку ваш набор символов базы данных WE8MSWIN1252, ваши данные, как мы надеемся, на самом деле не хранятся как UTF-8.Если фактические данные хранятся в столбце CHAR, VARCHAR2 или CLOB, данные либо сохраняются с использованием набора символов Windows-1252, либо данные были сохранены неправильно.Возможно, вы неправильно сконфигурировали свою среду NLS, так что вы на самом деле храните данные UTF-8 в базе данных, но, надеюсь, дело не в этом.

На основании выходных данных функции DUMP, чтосимвол вы ожидаете, что будут храниться в третьей позиции данных?0xB6 - это данные, которые фактически хранятся в базе данных и отображаются на символ абзаца ¶ в наборе символов Windows-1252 .Предполагая, что это не тот символ, который вы ожидаете, может показаться, что данные, хранящиеся в базе данных, повреждены.

На каком языке (ах) записаны ваши данные?Все ли символы, которые вы хотите сохранить, присутствуют в наборе символов Windows-1252 ?

Вы пытаетесь изменить способ хранения данных?Или вы пытаетесь получить данные в другом наборе символов?

Если набор символов базы данных - AL32UTF8, национальный набор символов - AL32UTF16, и вы хотите сохранить данные в базе данных, используя UTF-16,вам нужно переместить данные в столбец NVARCHAR2 или NCLOB.

Если вы пытаетесь сохранить данные в формате UTF-8 в базе данных, а затем отправить их клиенту в UTF-16,это можно сделать автоматически, настроив клиентские настройки NLS.Как именно вы это сделаете, будет зависеть от того, как клиент обращается к базе данных (JDBC, ODBC и т. Д.).

...