Странности с русскими буквамив TSQLQuery

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Странности с русскими буквамив TSQLQuery

Сообщение cav » 24.06.2021 14:03:24

Здравствуйте.
Имеется следующая интересная проблемка.
итак Lazarus 2.0.12 r64642, база данных Firebird 2.5. База данных создана в UTF-8
Используются только стандартыне компоненты т.е. TIBConnect и TSQLQuery, CharSet у коннекта UTF-8
Все русские символы получаемые из полей таблиц в гриде и по asSelect отображаются нормально.
но вот если у TSQLQuery сделать в SelectSQL замену значения на константу то вот ту начинается веселье. а именно строка обрезается самым занятным образом.
Код: Выделить всё
SQL = 'select'+LineEnding+
'  ''жопа'','+LineEnding+
'  ''жопулечка'','+LineEnding+
'  ''между жопие'','+LineEnding+
'  ''hellmstale value'','+LineEnding+
'  ''бегемотообразное'''+LineEnding+
'from rdb$database';


к примеру при выводе вот этого в гриде первое слово обрезалост до - 'жо' третье по пробел т.е. -"между" латинскими символами там все нормально а последнее обрезалось до 'бегемото'
вопрос куда копать ?
cav
новенький
 
Сообщения: 28
Зарегистрирован: 16.11.2006 08:56:03
Откуда: Кемерово

Re: Странности с русскими буквамив TSQLQuery

Сообщение Vadim » 24.06.2021 16:55:12

А если так попробовать:
Код: Выделить всё
CAST('жопа' as varchar(8))

?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Странности с русскими буквамив TSQLQuery

Сообщение cav » 25.06.2021 06:20:05

Да так работает. но это плохо... и странно
ibexpert показывает все как положено без костылей....
а тут придется кастом расширять в двое каждую константу.
Кстати если из запроса сделать view и вызывать его (без cast) то наблюдаем туже самую картину...
cav
новенький
 
Сообщения: 28
Зарегистрирован: 16.11.2006 08:56:03
Откуда: Кемерово

Re: Странности с русскими буквамив TSQLQuery

Сообщение sign » 25.06.2021 09:23:00

cav писал(а):к примеру при выводе вот этого в гриде первое слово обрезалост до - 'жо' третье по пробел т.е. -"между" латинскими символами там все нормально а последнее обрезалось до 'бегемото'
вопрос куда копать ?

Русские символы кодируются двумя байтами. Потому строка "жопа" имеет длину 4+4 = 8 байт. А либо передается, либо принимается 4 байта.
А латинские символы занимают один байт. И не обрезаются.
Поэтому, если напишите "jopa", то и получите - "jopa"
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Странности с русскими буквамив TSQLQuery

Сообщение Снег Север » 25.06.2021 13:26:50

Использовать параметризованный SQL и присваивать значения параметрам нужного типа. Насколько я помню, там есть где-то возможность настройки соответствия паскалевского типа данных с серверным.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2994
Зарегистрирован: 27.11.2007 16:14:47


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 34

Рейтинг@Mail.ru