Oracle добавляет NULL-байт (ASCII: 0) в строку varchar2 - PullRequest
0 голосов
/ 03 июня 2009

Я столкнулся со странной проблемой с устаревшим приложением ASP, которое использует Oracle 9i в качестве своей базы данных. Недавно администратор базы данных увеличил размер поля VARCHAR2 с VARCHAR2 (2000) до VARCHAR2 (4000). Проблема заключается в том, что байт NULL (ASCII: 0) вставляется в позицию символа 2001 в строке, даже если длина вставленной строки превышает 2000 символов. Например, если приложение вставляет в таблицу новую запись со строкой 2500 символов, тогда в поле VARCHAR2 сохраняется 2501 символ, а байт NULL вставляется в позицию символа 2001 года. Байт NULL не является частью исходных опубликованных данных, которые были сохранены в базе данных, и вызывает у нас некоторое горе. Кто-нибудь из вас сталкивался с чем-то подобным? Приложение использует драйвер MSDAORA ODBC, и я думаю, что драйвер добавляет завершающий символ NULL в свой строковый буфер, который может иметь внутренний предел в 2000 символов.

Есть идеи?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 04 июня 2009

Перейти на уровень трассировки 10046 4

alter session set events '10046 trace name context forever, level 4';

Это создаст файл трассировки на сервере, который будет содержать значение привязки (чтобы вы могли видеть, является ли нулевой байт частью строки, помещаемой в SQL).

Есть ли какие-либо странности набора символов (например, используете ли вы многобайтовый набор символов)? Чем больше странностей в среде, тем больше вероятность, что вы найдете ошибку.

Последняя мысль: попробуйте CLOB вместо VARCHAR2 (4000)

0 голосов
/ 03 июня 2009

Я действительно не думаю, что это делает ORACLE. Вы всегда можете использовать RTRIM для удаления пробелов в операторе вставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...