Хорошо, я суммирую свои комментарии в правильном ответе.
У вас есть два возможных решения:
- сохранить их в столбцах NVARCHAR2 / NCLOB
- reкодировать значения JSON, чтобы использовать только символы ASCII
1.NCLOB / NVARCHAR
Символ «N» в «NVARCHAR2» обозначает «Национальный»: этот тип столбца был введен именно для хранения символов, которые не могут быть представлены в «наборе символов базы данных».".
Oracle фактически поддерживает ДВА набора символов:
" Набор символов базы данных "- это тот, который используется для обычных полей varchar / char / clob и для внутренних данных-dictionary (другими словами: это набор символов, который можно использовать для именования таблиц, триггеров, столбцов и т. д.)
«Национальные наборы символов»: используемый набор символовдля хранения значений NCLOB / NCHAR / NVARCHAR, которые должны использоваться для хранения «странных» символов, используемых на национальных языках.
Обычно вторым является набор символов UNICODEТаким образом, вы можете хранить там любые данные, даже в старых установках
2.кодировать значения JSON, используя только символы ASCII
Это правда, что стандарт JSON разработан с учетом UNICODE, но также верно и то, что он позволяет выражать символы как escape-последовательности с использованием десятичного представленияих кодовые точки ... и если вы сделаете это для каждого символа, имеющего кодовую точку больше 127, вы можете выразить ЛЮБОЙ объект Unicode, используя только символ ASCII.
Эта строка ASCII JSON: '{"UnicodeCharsTest": "ni \ u00f1o "} 'представляет тот же объект этого другого объекта:' {" UnicodeCharsTest ":" niño "} '.
Лично я предпочитаю этот второй подход, поскольку он позволяет мне легко обмениваться этими строками jsonтакже с системами, использующими устаревшие устаревшие протоколы, и это также позволяет мне быть уверенным, что строки json правильно считываются любым клиентом независимо от его национальных настроек (протокол клиента oracle может пытаться преобразовать строки в символ, используемый клиентом ...и это осложнение, я не хочу иметь дело сIth.Кстати: это может быть причиной проблем, с которыми вы сталкиваетесь при работе с клиентами SQL)