Похоже, что ваша проблема связана с набором символов БД или разницей в наборах символов между приложением и БД.Что касается Oracle, вы можете проверить это, выполнив:
select value from sys.nls_database_parameters where parameter='NLS_CHARACTERSET';
Если это произойдет ascii (например, US7ASCII), то у вас могут возникнуть проблемы с правильным хранением данных.Даже если это кодировка, вы сможете вставлять и получать отсортированные (двоичные сортировки), используя nvarchar2 и unistr (при условии, что они соответствуют вашему NLS_NCHAR_CHARACTERSET, см. Запрос выше, но измените параметр), например:
create table test1(val nvarchar2(100));
insert into test1(val) values (unistr('\00a3')); -- pound currency
insert into test1(val) values (unistr('\00a5')); -- yen currency
insert into test1(val) values ('$'); -- dollar currency
commit;
select * from test1
order by val asc;
- будет давать символы по порядку: доллар ('\ 0024'), фунт ('\ 00a3'), иена ('\ 00a5')
Я скажу, что не буду прибегать к использованиюнациональный набор символов, я бы, вероятно, изменил набор символов db, чтобы он соответствовал потребностям моих данных, так как поддержка двух наборов символов не идеальна, но в любом случае доступна
Если у вас нет проблем с сохранением / получением данныхсторона, тогда ваш набор символов приложения / клиента, вероятно, отличается от вашего db.