我们的Oracle数据库的默认字符集是UTF-8，如何按中文排序呢?
李小翔
2013-12-23 18:07

内容列表

Oracle数据库字符集为UTF-8时，默认的order by查出来的数据顺序不是按中文拼音来的，具体原因可以Google一下“oracle 字符集 排序”。
按照网络上的各种解决方案，如果需要按照中文排序，无非就是设置 NLS_SORT 参数，不论是session级别的、还是sql语句级别的、或者操作系统级别的。
Grails中的默认ORM框架是hibernate，因此可以进一步Google在Hibernate中的解决方案，以及Grails + Hibernate的解决方案，比如这篇帖子。
在Grails工程中安装了BroToolkit插件后，只需要在 DataSource 中配置一个定制的 HibernateConfiguration，就可以实现中文排序。
hibernate { 
    properties { 
        oracle.nls_sort = ”SCHINESE_PINYIN_M”    // 按中文拼音排序
    } 
} 
dataSource { 
    configClass = bropen.toolkit.orm.HibernateConfiguration
   ......
} 
该配置同样可以支持通过外部properties文件加载，并可以支持多数据源，详细可参考安装后的 DataSource.groovy 和 DataSource.properties 模板文件。
此外，这个Hibernate配置类还可以支持设置Oracle数据库表空间、设置数据库连接池自增等。