powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird 2.5.9 MalformedSring
25 сообщений из 36, страница 1 из 2
Firebird 2.5.9 MalformedSring
    #40021342
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.
Пытаюсь выполнить запрос в IBExpert

Код: plsql
1.
select 'FMD test pack²€ööäöüüöl' from rdb$database



и получаю ошибку

Код: plsql
1.
2.
3.
4.
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Malformed string.



На самом деле вытащил эту часть из другого стэйтмента, который давал точно такую же ошибку. Что в строке не так?

Firebird 2.5.9.27139 x64, Windows 10. Соединение выполенно с Charset 'UTF8'.

PS: Так как сайт корежит символы, вложил текстовый файл с оригинальным запросом.
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021347
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично я и в блокноте/Far наблюдаю бессмысленную фигню.
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021349
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

в лебедевском декодере тоже бредятина.
#178;Б┌╛ЖЖДЖЭЭЖl
HTML-Entities -> CP1250 -> KOI8-R

видимо, какая-то каша из хтмл-кодировки и прочего.

из блокнота тоже фигня: CP1252->ISO-8859-5
В блокноте не задан юникодный BOM?
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021352
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

очень может быть. Сохранял в Блокноте, как UTF8. Там стоят немецкие умляуты и пара специфических символов.
Сейчас попробовал на версии с тем же номером, но х32 - проблема повторяется.

Оригинальный запрос был на Insert. Попробовал заносить данные через переменную - результат тот же: как только добавляю любой умляут, сразу сообщение о malformed string.
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021355
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svd,
В этом вложении уже точно с BOM.
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021357
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проследи, что эта переменная именно в utf-8, выведя двоичные коды символов и сверив их с
таблицей. Если она строковая - убедись, что не происходит дополнительного преобразования в
компонентах доступа.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021362
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svd,

так в блокноте и видны одни умляуты - ööäöüüö.
Это разве какой-то осмысленный текст? Умляуты, вообще-то, вполне нормально и в win1252 имеются.
Так-то да, у вас там по 2 байта на символ, но оно привычными способами че-то никак не расшифровывается.
Попутно вопрос - в ИБЕ, раз указана кодировка utf8, галка do NOT perform conversion from/to UTF8 надеюсь, убрана?
Откуда вообще эта строка?
В дельфи в примитивном приложении по кнопке что выдаст IsUTF8String или UTF8Decode? Может это как раз просто WideString?
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021366
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,
Во фразе смысла, конечно, нет. Просто при тесте решили проверить как будет проходить работа со специальными символами, как умяуты и похожая дребедень у французов. И вот выкидывает сообщение, что не может провести Insert в таблицу. Эмпирическим путем найдена эта строка, попытался ее просто вывести с помощью rdb$database - выкидывает туже ошибку.
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021376
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svd,

гм. Если строка пришла из Delphi, то это widestring (utf-16), двухбайтовая кодировка.
Firebird не умеет такое хранить, только UTF8. Поэтому, когда указан чарсет коннекта UTF8, widestring конвертируется в uft8 и отправляется на сервер, и наоборот преобразуется с сервера (из utf8 в widestring). Преобразуется - компонентами.
Компоненты знают, что сейчас в дельфи widestring.
widestring - фиксированный формат. uft8 -плавающий (от одного до 3 или 4х байт на символ).

Поэтому, если откуда-то брать некие не-UTF8 байты, и пытаться их засунуть в базу как uft8 без соответствующих перекодировок - странно.
https://forum.sources.ru/index.php?act=Attach&type=post&id=2635238&attach_id=

ну и, тестировать надо на каком-то осмысленном тексте. Иначе на входе бурда, и на выходе бурда, и мы не понимаем, сконвертировалось оно нормально или нет.
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021379
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svd,

короче. чарсет коннекта UTF8 указывает, что в ФБ символы приходят в этом формате. Если эти данные надо сохранить в строку с кодировкой UTF8 - никаких преобразований не происходит. А если у строки win1251, сервер будет внутри себя конвертировать utf8 в win1251.
Собственно, при чарсете коннекта utf8 и строках utf8 ошибка malformed string означает только одно - что в фб приехала строка НЕ в utf8.
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021404
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

ok.

Открываю IBExpert, пишу запрос

select 'Götten wurden entteuscht' from rdb$database

запускаю и получаю

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Malformed string.

При этом я могу без проблем внести в любой столбец любой таблицы, где стоит character set utf8, любые символы. Даже китайские иероглифы.

...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021407
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svdОткрываю IBExpert, пишу запрос


Прямо с клавиатуры пишешь? Тогда этот топик нужно переместить в соответствующий подфорум.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021413
dennis-r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svd

Открываю IBExpert, пишу запрос

select 'Götten wurden entteuscht' from rdb$database
Правая кнопка - Convert TO UTF8.
"Я так думаю!" (с)
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021417
zigorzn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
svd,

если так не ругается
select cast('Götten wurden entteuscht' AS VARCHAR(300) CHARACTER SET UTF8 ) from rdb$database

значит кодировка БД не UTF8
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021420
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zigorzn,

Абсолютно тоже самое
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021430
zigorzn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
svd,

это кодировка подключения

для БД:
select RDB$CHARACTER_SET_NAME from RDB$DATABASE
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021432
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тоже самое происходит при передаче значений в параметре

...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021443
demon1992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
svd,

Только что проверил запрос select cast('Götten wurden entteuscht' AS VARCHAR(300) CHARACTER SET UTF8 ) from rdb$database и на 2.5.9 и на 3.0.7 отрабатывает без проблем. Коннект UTF8 база WIN1251.
Проблемы твои скорее всего из-за винды, на ней помню такая же необъяснимая дичь была с кодировкой.
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021452
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
demon1992,

Спасибо! Проверил так же. На рабочем сервере стоит ФБ той же версии, но х64. На своей я пробовал версию 2.5.5 и тоже ошибку выбрасывает, но все win32. Сейчас у двух коллег попробовали, тоже сообщают, что у них все без проблем идет.
Хоть теперь понятно в какую сторону нужно копать.
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021461
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svd,

вот не в том направлении надо копать.
- Firebird 2.5.9.27139, 32bit, windows 10 enterprise 64bit, русская
- create database utf8 character set utf8;
- чарсет коннекта -utf8
- ibe версии 2020.4.1.1.
- rdb$database.rdb$character_set_name = UTF8.
- select 'Götten wurden entteuscht' from rdb$database
выполняется отлично, никаких ошибок, выдает заданное в строке
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021463
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

А поточнее?

из приведенного списка, только "windows 10 Enterprise НЕ русская".

сейчас поиски идут в напревлении:
- неправильно установленный firebird. Неправильно его трудно установить, но на моем персональном компьютере из-за разных версий может быть. Хотя на сервере установка была на чистую Windows без ничего, но проверить не мешает.
- обнаружились отличные версии IBExpert.
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021465
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot svd#22237342]kdv,

Да, еще забыл указать: names в базе iso8859_1
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021471
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svdДа, еще забыл указать: names в базе iso8859_1
я не пойму, к чему тогда этот топик затевать. А у столбцов какие кодировки?
Зачем указывать чарсет коннекта utf8, если у столбцов в базе не utf8, например? в надежде что "любой символ" из utf8 перекодируется в конкретную кодировку? Так нет же.
Почему всю инфу надо выколупывать? Я в одном комменте выдал абсолютно всё что было надо.
svd- неправильно установленный firebird.
я не знаю, как можно "неправильно установить" ФБ из zip. распаковываем в любую папку, после чего в cmd запускаем из bin/
fbserver -a
и всё работает.
svd- обнаружились отличные версии IBExpert.
ну и у кого старее - у меня или у вас? Опять еще один вопрос. Почему вы сразу при словах про "отличные" не можете привести свою версию ибэксперта из about?
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021486
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

У столбцов кодировка по умолчанию iso8859_1. Большинство столбцов имеют такую же. Столбец, который сообщает при обновлении
о Malformed String имеет кодировку UTF8.

IBExpert на моей машине имеет версию от 2018 года. У коллег, у кого все нормально - 2020.

Firebird можно испортить хотябы тем, что обновив версию сервера, пропустить галку копирования библиотеки в системную папку и уже старая версия библиотеки будет давать головную боль.


Еще вопрос, если обновить в rdb$database.rdb$character_set_name новое значение на UTF8, сделать бэкап-рестор, будет ли база и данные испорчена и сменит ли она default names на UTF8? Подозреваю, что столбцы с кодировкой ISO8859_1 так и останутся с ней, но это и надо.
...
Рейтинг: 0 / 0
Firebird 2.5.9 MalformedSring
    #40021504
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svdЕще вопрос, если обновить в rdb$database.rdb$character_set_name новое значение на UTF8, сделать бэкап-рестор
а бэкап-рестор то зачем? Вы не в курсе, что даёт чарсет базы? Это просто дефолтное значение чарсета для новых строковых столбцов (у которых кодировка не указана). Если новых столбцов нет, то изменение чарсета БД вам ничего не даст.

p.s. подозреваю, что исходный глюк в старом ibexpert. надо было сразу в isql проверять. Или из приложения.
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird 2.5.9 MalformedSring
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]