Oracle 中的 NLS_CHARACTERSET WE8ISO8859P1 和 UTF8 问题

use*_*573 3 java oracle

我目前在 oracle 中使用一个数据库,它有 NLS_CHARACTERSET WE8ISO8859P1 所以假设我在 varchar2 字段中存储一个值,它是 maž (重音字符),所以在数据库中它被存储为 maå¾ 。现在,当我尝试使用 query select * from table where fieldValue = 'maž' 检索它时,它返回 0 行,然后当我尝试再次插入它时,它给了我一个约束错误,说值已经存在。

如何克服这种情况。我正在通过 Java 代码执行此操作

Mul*_*ync 5

http://docs.oracle.com/cd/B19306_01/server.102/b14225/ch2charset.htm#g1009784

Oracle 字符集名称:WE8ISO8859P1
描述:西欧 8 位 ISO 8859 第 1 部分
区域:WE(西欧)
用于表示字符的位数:8

另一方面,UTF-8 使用几个字节来存储一个符号。

如果您的数据库使用 WE8ISO8859P1 并且列类型来自 VARCHAR 组(不是 NVARCHAR),并且您插入的符号代码 > 255,则该符号将转换为 WE8ISO8859P1 并且一些信息将丢失。

简而言之,如果您将 UTF-8 插入到具有单字节字符集的数据库中,您的数据就会丢失。

上面的链接描述了如何解决这个问题的不同场景。

也可以试试oracle asciistr/ unistrfunctions,但一般来说不是很好的处理这类问题的方法。