将PostgreSql迁移到Oracle,处理CITEXT数据类型

时间:2012-07-02 23:08:33

标签: database postgresql oracle11g

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

1 个答案:

答案 0 :(得分:1)

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

  1. 您可以通过隐式包装lower()来执行文档所说的内容,但这很冗长且本质上不安全。
  2. 添加TRIGGER以小写形式存储文本,但您仍然需要将静态字符串保持为小写。
  3. Oracle和PostgreSQL都支持创建运算符。如果两个引擎的SQL需要相同,则可以定义新的Oracle OPERATORPostgreSQL OPERATOR。这也带有一个空洞,你的SQL将变得不那么便携,或者在不了解你的运营商的其他数据库上产生意想不到的结果。
  4. 您可以在alter session set nls_comp=ansi;的会话中临时更改Oracle的环境,这会将所有内容都比较为小写。