我有问题,通过包含波兰字符的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
可以在不更改数据库编码的情况下修复此问题吗?
答案 0 :(得分:5)
您需要查看NLS_SORT参数,特别是linguistic sorting。您可以使用此参数指定language you'd like to sort by。我怀疑你的情况是POLISH
。
像这样的东西
select *
from something
order by nls_lower(name, 'NLS_SORT' = 'POLISH')
NLS_LOWER()
以与普通LOWER()
相同的方式返回小写字符。
您也可以在会话级别执行此操作,这会在会话期间更改默认排序参数。
alter session set nls_sort = POLISH;
如果你想总是使用这种类型;这是在创建数据库时完成的数据库级别。