2

我对包含波兰字符(如 ą、Ą)的 varchar 进行排序时遇到问题。

例如,我们有以下名称:

Aaaa
BBcvx
Ąccc
Ddde
ądcc

以下查询:

select * from something order by lower(name);

返回结果如下:

Aaaa
BBcvx
Ddde
ądcc
Ąccc

如您所见,波兰语字符被忽略并放在最后。它应该是:

Aaaa
ądcc
Ąccc
BBcvx
Ddde

可能是什么问题?数据库编码?我的是:

SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';

Result:
EE8MSWIN1250

可以在不更改数据库编码的情况下解决这个问题吗?

4

1 回答 1

5

您需要查看NLS_SORT参数,特别是语言排序。您可以使用此参数来指定您想要排序的语言。我怀疑在你的情况下它会是POLISH

像这样的东西

select *
  from something
 order by nls_lower(name, 'NLS_SORT' = 'POLISH')

NLS_LOWER()以与普通 相同的方式返回小写字符LOWER()

您也可以在会话级别执行此操作,这将更改会话期间的默认排序参数。

alter session set nls_sort = POLISH;

如果您想始终使用这种类型;这是在创建数据库时在数据库级别完成的。

于 2013-01-02T18:57:04.597 回答