Начало » Использование СУБД » Firebird, HQbird, InterBase » EXECUTE STATEMENT и "маркеры" кодовых страниц
EXECUTE STATEMENT и "маркеры" кодовых страниц [сообщение #2726] |
Mon, 10 July 2023 13:32 |
Dmitry Kovalenko
Сообщений: 51 Зарегистрирован: December 2022
|
Member |
|
|
По следам вот этого топика провел такой смелый эксперимент с EXECUTE STATEMENT
Походу эта штука не рюхает указание кодовых страниц перед текстом.
---
Юзается исключение:
CREATE EXCEPTION EXC$CHECK_DATA '---------';
--- Тесты
Кодовая страница подключение NONE.
(1) запрос из приложения:
execute block as begin EXECUTE STATEMENT _utf8 'execute block as begin EXCEPTION EXC$CHECK_DATA _win1251 ''куку''; end'; end
На сервер будет передана запрос
execute block as begin EXECUTE STATEMENT _utf8 'execute block as begin EXCEPTION EXC$CHECK_DATA _win1251 ''РєСѓРєСѓ''; end'; end
Возвращается ошибка
Цитата:exception 4
EXC$CHECK_DATA
РєСѓРєСѓ
At block line: 1, col: 24"
То есть сервер не приводит ''РєСѓРєСѓ'' к кодовой странице win1251.
Но интерпретирует её как WIN1251, потом приводит к UTF8 и возвращает вот это страшное РєСѓРєСѓ.
С помощью Notepad++ и двух преобразований из РєСѓРєСѓ получается исходное куку.
2) Запрос из приложения
execute block as begin EXECUTE STATEMENT _win1251 'execute block as begin EXCEPTION EXC$CHECK_DATA _utf8 ''куку''; end'; end
На сервер он будет передан как есть.
И сервер выдаст ошибку
Цитата:Dynamic SQL Error
SQL error code = -104
Malformed string
At block line: 1, col: 24
Потому что русское "куку" не является UTF8-строкой.
3) Запрос из приложения
execute block as begin EXECUTE STATEMENT 'execute block as begin EXCEPTION EXC$CHECK_DATA _utf8 ''РєСѓРєСѓ''; end'; end
Он будет передан на сервер без преобразований
Сервер вернет ошибку
Цитата:EXC$CHECK_DATA.
РєСѓРєСѓ.
At block line: 1, col: 24.
Тут сервер возвращает _utf8 ''РєСѓРєСѓ'' как есть.
---
Вообщем суть в том, что EXECUTE STATEMENT выступая в роли клиента по отношению к серверу, должен более умно преобразовывать переданную ему строку.
Да?
|
|
|
Переход к форуму:
Текущее время: Sun Dec 22 10:07:57 GMT+3 2024
Общее время, затраченное на создание страницы: 0.00845 секунд
|