0

我实际上以 UTF-8 格式将资源存储在 DB 中。但是当我现在想将它们全部转换为 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,5a, 65,69,6c,65,20,77,69‌​,72,6b,6c,69,63,68,20,65,6e,64,67,c3,bc,6c,74,69,67,20 ,6c,c3,b6,73,63,68,65,6e,3f​, Möchten Sie diese Zeile wirklich endgültig löschen?

4

1 回答 1

1

由于您的数据库字符集是 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 等)。

于 2011-08-17T14:08:51.940 回答