2012-07-02 47 views
0

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

回答

1

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

  1. 您可以通过隐含地包装lower()来做文档说明的事情,但这是冗长而固有的不安全。
  2. 添加TRIGGER以小写形式存储文本,但仍然不得不将您的静态字符串保持为小写。
  3. Oracle和PostgreSQL都支持创建操作符。如果两个引擎的SQL需要相同,则可以定义新的Oracle OPERATORPostgreSQL OPERATOR。这也伴随着你的SQL将变得不便携或在其他不理解你的操作的数据库上产生意想不到的结果。
  4. 您可以在alter session set nls_comp=ansi;的会话中暂时更改Oracle的环境,它会将所有内容都比较为小写。
+0

'nls_comp = ansi'将**不**使比较不区分大小写。你可能的意思是'nls_comp = Linguistic'连同例如'nls_sort = BINARY_CI' –

+0

感谢您的输入。我会尽力回复。 – devang