Обновите NClob, используя N функций
Я использую функцию N для обновления NClob в запросе SQL. Однако обновление с использованием функции N не позволяет мне обновлять более 1900 символов. После удаления функции N Я могу обновить более 1900 символов в моем столбце NClob.
Кто-нибудь может мне помочь, почему я не могу обновить столбец NClob с помощью функции N? Есть ли какие-либо ограничения на это?
Код
StringBuilder updateQuery = new StringBuilder("обновить имя_таблицы set имя_ столбца ="); updateQuery.append(" = N'").append(NClobContent).append("'").append(", "); ps.execute(updateQuery.toString());
1 ответ
Как указано в документации:
- Текстовый литерал может иметь максимальную длину 4000 байтов.
N означает, что литерал использует набор национальных символов, который будет либо UTF8, либо AL16UTF16 (последний по умолчанию), поэтому даже если ваша длинная строка содержит менее 4000 символов, она все равно может содержать более 4000 байтов.
Без N строка интерпретируется в наборе символов базы данных, а затем литерал преобразуется в набор символов страны, поскольку он хранится в вашем NCLOB. Следовательно, вы можете иметь более длинную строку - если ваш набор символов базы данных является однобайтовым, то вы можете получить до 4000 символов, хотя любые многобайтовые символы в вашем NClobCOntent
переменная будет повреждена.
Вместо использования синтаксиса N передайте вашу переменную в базу данных в виде потока; Вы можете найти этот ответ полезной отправной точкой. Или вы можете использовать этот подход, в зависимости от длины строки.