【问题标题】:How to use Collate in Hibernate for french char set如何在 Hibernate 中将 Collat​​e 用于法语字符集
【发布时间】:2014-07-18 08:13:00
【问题描述】:

您好,当我使用以下查询时,我正在尝试对列名为 per_va_first_name 的视图使用整理:

SELECT *
 FROM person_view
 WHERE NLSSORT(per_va_first_name, 'NLS_SORT = FRENCH_AI') = NLSSORT('mickaël', 'NLS_SORT  =FRENCH_AI')

我得到了错误

ORA-12702: SQL 函数中使用了无效的 NLS 参数字符串

我是 oracle 的新手,这是 nlssort。谁能帮我指出我的错误是什么? 同时我想在 Hibernate for Java 中使用 collat​​e。相同的法语字符集。

编辑:

当我在 sql 中使用这些命令时

alter session set nls_sort=French_AI;
alter session set nls_comp=linguistic;

当这个查询被执行时,我得到了想要的输出

SELECT * FROM v_myuser_search_test_ea4 where per_va_first_name like 'Mickaël%'

如何在 Hibernate 中做到这一点?有没有办法可以将“CI”附加到 French_AI 以使其成为“French_AI_CI”

【问题讨论】:

    标签: java sql oracle hibernate collate


    【解决方案1】:

    根据http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions113.htm#SQLRF51562 上的 Oracle 文档

    您可以将查询更改为

    SELECT *
    FROM person_view
    ORDER BY NLSORT(per_va_first_name, 'NLS_SORT = FRENCH_AI_CI')
    

    Hibernate 应该理解它,但是您已经失去了数据库的可移植性,因为这是 Oracle 特有的功能。

    【讨论】:

    • 我试过了,没用。它只返回一条名为“mickael”的记录,而不是所有名为“mickael”的记录。 Bdw 我在使用 French_CI_AI 时犯了错误。我不知道是什么问题,但要么支持 French_AI 要么支持 French_CI,但不能同时支持。
    • 对不起,我不明白你最初的问题。您可以更改 NLS_SORT 和 NLS_COMP 的数据库级别的属性吗?
    • 据我记得,Oracle JDBC 驱动程序没有设置这些参数的选项,它使用底层 VM 字符集和整理器编码。 Linux 上的 WebSphere 应用程序服务器与 UTF-8 上的 Oracle 数据库通信时,我遇到了类似的问题。在我设置 VM 属性 user.language 和 user.country 之前,整理器无法工作(对于您的情况,它将是 -Duser.language=fr -Duser.country=FR)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 2011-07-18
    • 2012-06-27
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多