0

我有一个最初使用 PostgreSql 构建的应用程序。在适当的时候,我们现在需要支持 Oracle。我正在使用 Liquibase 进行 DB 版本控制和 Hibernate ORM 工具。PostgreSql 模式中的某些列具有 CITEXT 数据类型。它需要在数据库端具有相同的功能,而不进行任何代码更改,以实现类似于 CITEXT 提供的功能。而且,我在这里明白我将不得不在 Oracle 中使用 VARCHAR2(xx)。

4

1 回答 1

2

CITEXT只是lower()在比较之前运行;

  1. 您可以通过隐式包装来执行文档中所说的操作,lower()但这很冗长且本质上是不安全的。
  2. 添加一个TRIGGER以以小写形式存储文本,但您仍然必须将静态字符串保持为小写。
  3. Oracle 和 PostgreSQL 都支持创建操作符。如果两个引擎的 SQL 需要相同,您可以定义一个新的Oracle OPERATORPostgreSQL OPERATOR。这也伴随着您的 SQL 将变得不那么可移植或在不了解您的运算符的其他数据库上产生意外结果的警告。
  4. 您可以在会话中临时更改 Oracle 的环境,alter session set nls_comp=ansi;并将所有内容都作为小写进行比较。
于 2012-07-03T13:05:39.330 回答