Oracle中的NLS_CHARACTERSET WE8ISO8859P1和UTF8问题

时间:2014-12-04 14:14:39

标签: java oracle

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

如何克服这种情况。 我通过Java代码

这样做

1 个答案:

答案 0 :(得分:1)

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 / unistr函数,但一般来说,这不是处理此类问题的好方法。