Различия в подготовленных и прямых заявлениях с использованием Oracle ODBC

StackOverflow https://stackoverflow.com/questions/218332

Вопрос

Я использую базу данных Oracle с сопоставлением, отличным от языка моей ОС. Я получаю доступ к базе данных с помощью драйвера ODBC. Когда я подготавливаю оператор (например, «select * from x where =?»), Который включает в себя специальные символы не ASCII, поддерживаемые параметрами сортировки БД, я нахожу строку данных с символами. Когда я выполняю выборку непосредственно с аргументом в строке sql, строка данных не найдена.

Это было полезно?

Решение

Чистая догадка с моей стороны, но это может быть потому, что ваш клиентский компьютер не кодирует строку sql с аргументом, записанным в нее правильно. Я думаю, что если ваш клиент настроен на региональные настройки, отличные от параметров сортировки БД, массив символов, содержащий оператор SELECT, отправляемый в Oracle, будет содержать " неверный " байты, в которых находились оригинальные символы в стиле фанк - Oracle будет интерпретировать их как некоторый символ, отличный от того, который вы изначально отправили (в результате чего строка не будет найдена).

Есть ли причина, по которой вы не можете просто использовать параметризованный подход (поскольку он работает правильно)?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top