java - Oracle 中的 NLS_CHARACTERSET WE8ISO8859P1 和 UTF8 问题

标签 java oracle

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

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

最佳答案

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

Oracle Character Set Name: WE8ISO8859P1
Description: Western European 8-bit ISO 8859 Part 1
Region: WE (Western Europe)
Number of Bits Used to Represent a Character: 8

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

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

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

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

你也可以试试 Oracle asciistr/unistr 函数,但总的来说,这不是处理此类问题的好方法。

关于java - Oracle 中的 NLS_CHARACTERSET WE8ISO8859P1 和 UTF8 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27296249/

相关文章:

java - Spring Boot 在配置问题中定义 bean

java - Java中的Itext PDF操作

mysql - 在 MySQL/Oracle 数据库中切换 bool 值

c# 选择查询到 Oracle 数据库抛出 "Custom type mapping for ... is not specified or is invalid"

java - 关于 Oracle 教程拼写错误的确认

java - 在从 String > 4k 创建的谓词中使用 Oracle clob

java - 在 Scala 中使用 Java 语言环境会报错 : object is not a value

java - 如何将所有文档请求路由到 Java servlet

java - 如何在 Java 中比较字符串?

oracle - 如何将参数放入连接到 Oracle 数据库 11g 的 SSRS 2008 R2 中的查询中