Поиск в столбце Oracle NCLOB в однобайтовой среде Oracle
Развертывание ORACLE 12.01
Набор символов однобайтового развертывания:
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_CHARACTERSET WE8MSWIN1252
Набор символов многобайтового развертывания:
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_CHARACTERSET AL32UTF8
У меня есть таблица ниже в обеих средах:
CREATE TABLE "DEPARTMENTS_JSON_NCLOB"
( "DEPARTMENT_ID" NUMBER(*,0) NOT NULL ENABLE,
"DEPARTMENT_DATA" NCLOB NOT NULL ENABLE
);
Обратите внимание, что у меня есть столбец NCLOB для хранения данных, и согласно набору символов, используемому для столбца NCLOB, является NLS_NCHAR_CHARACTERSET, который одинаков в обеих средах.
Ниже вставки в обеих средах:
Insert into DEPARTMENTS_JSON_NCLOB (DEPARTMENT_ID,DEPARTMENT_DATA) values (140,'{"department_list":[{"Deptname":"DEPT-A", "value" : "məharaːʂʈrə"}]}');
Insert into DEPARTMENTS_JSON_NCLOB (DEPARTMENT_ID,DEPARTMENT_DATA) values (2000,'{"department_list":[{"Deptname":"DEPT-A", "value" : "məharaːʂʈrə"}]}');
Insert into DEPARTMENTS_JSON_NCLOB (DEPARTMENT_ID,DEPARTMENT_DATA) values (2001,'छत्रपती Akshay â, ê, î, ô, û');
Попробуйте выполнить поиск в обеих средах:
select * from departments_json_nclob where department_data like '%छत्रपती%';
select * from departments_json_nclob where department_data like '%məharaːʂʈrə%';
Пытался выполнить поиск в обеих средах с разными многобайтовыми входами, но однобайтовый результат не дает строк, однако многобайтный показывает соответствующие результаты. Почему? Поскольку NCLOB ссылается на NLS_NCHAR_CHARACTERSET, который одинаков для обеих сред
Мои наблюдения: потеря реальных символов в одном байте -
select c, length(c), lengthb(c) from (select substr(s, level, 1) c from (select 'छत्रपती Akshay â, ê, î, ô, û Ñ ü Á É Í Ó Ú' s из двойного) соединить по уровню <= length(s));
Проверь это --