Oracle数据库按波兰语字符排序

kam*_*mil 2 oracle sql-order-by oracle11g

我有通过varchar排序元素的问题,包含波兰字符,如±,Ą.

例如,我们有以下名称:

Aaaa
BBcvx
?ccc
Ddde
?dcc
Run Code Online (Sandbox Code Playgroud)

以下查询:

select * from something order by lower(name);
Run Code Online (Sandbox Code Playgroud)

返回结果如下:

Aaaa
BBcvx
Ddde
?dcc
?ccc
Run Code Online (Sandbox Code Playgroud)

如您所见,抛光字符被忽略并放在最后.它应该是:

Aaaa
?dcc
?ccc
BBcvx
Ddde
Run Code Online (Sandbox Code Playgroud)

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

SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';

Result:
EE8MSWIN1250
Run Code Online (Sandbox Code Playgroud)

可以在不更改数据库编码的情

Ben*_*Ben 5

您需要查看NLS_SORT参数,特别是语言排序.您可以使用此参数指定要排序的语言.我怀疑你的情况会是这样的POLISH.

像这样的东西

select *
  from something
 order by nls_lower(name, 'NLS_SORT' = 'POLISH')
Run Code Online (Sandbox Code Playgroud)

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

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

alter session set nls_sort = POLISH;
Run Code Online (Sandbox Code Playgroud)

如果你想总是使用这种类型; 这是在创建数据库时完成的数据库级别.