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

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

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

Ответить
cav
новенький
Сообщения: 28
Зарегистрирован: 16.11.2006 07:56:03
Откуда: Кемерово

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

Сообщение cav »

Здравствуйте.
Имеется следующая интересная проблемка.
итак 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';


к примеру при выводе вот этого в гриде первое слово обрезалост до - 'жо' третье по пробел т.е. -"между" латинскими символами там все нормально а последнее обрезалось до 'бегемото'
вопрос куда копать ?
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

А если так попробовать:

Код: Выделить всё

CAST('жопа' as varchar(8))

?
cav
новенький
Сообщения: 28
Зарегистрирован: 16.11.2006 07:56:03
Откуда: Кемерово

Сообщение cav »

Да так работает. но это плохо... и странно
ibexpert показывает все как положено без костылей....
а тут придется кастом расширять в двое каждую константу.
Кстати если из запроса сделать view и вызывать его (без cast) то наблюдаем туже самую картину...
sign
энтузиаст
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Сообщение sign »

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

Русские символы кодируются двумя байтами. Потому строка "жопа" имеет длину 4+4 = 8 байт. А либо передается, либо принимается 4 байта.
А латинские символы занимают один байт. И не обрезаются.
Поэтому, если напишите "jopa", то и получите - "jopa"
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Использовать параметризованный SQL и присваивать значения параметрам нужного типа. Насколько я помню, там есть где-то возможность настройки соответствия паскалевского типа данных с серверным.
Ответить