Мы используем столбцы VARCHAR2(4000 CHAR) в нашей базе данных Oracle для хранения данных JSON без слишком большого снижения производительности за счет использования CLOB. Я узнал, что 4000 CHAR технически ограничены 4000 BYTE, что является максимальной длиной для всех этих строковых столбцов. Даже NVARCHAR2 ограничен этими 4000 БАЙТ.
Вот почему мы пытаемся разделить наши строки на стороне Java кода на фрагменты по 4000 байт. Чтобы определить реальную длину строки в базе данных, мы используем String#getBytes(StandardCharsets.UTF_8).length. Кажется, это не работает надежно. Тем не менее Oracle иногда выдает следующую ошибку:
ORA-12899: Wert zu groß für Spalte
"OUR_DATABASE"."HISTORICAL_DATASETS"."JSON1" (актуэлл: 4006,
максимум: 4000)
Ораклом используется кодировка ALS32UTF8 – согласно SELECT параметр, значение ИЗ nls_database_parameters ГДЕ параметр LIKE 'NLS_CHARACTERSET'.
Что мне не хватает? Есть ли какие-либо дополнительные накладные расходы, несмотря на само кодирование?
Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-oracle
Как правильно ограничить строку для VARCHAR2 (4000 БАЙТ) в Oracle? ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение