Firebird + UTF8
Добавлено: 23.03.2016 15:05:39
Здравствуйте!
Есть поле DOCNUM VARCHAR(8), кодировка базы и поля, UTF8, соединение тоже UTF8. Использую FIBL + Firebird 2.5 + Lazarus 1.6 + FPC 3.0.0 + Win7
Проблема в следующем: пишу через FIBDataSet в это поле 'ПН-00001', а получаю 'ПН-000'.
С одной стороны, понятно, что Length('ПН-000') = 8, как длина поля. Но ведь это не правильно! Попытался через FIBQuery записать, ругается на превышение длины строки.
Полез в исходники, в TFIBStringField.SetAsString, там
Поскольку размер поля 8, то вот она и обрезка. Попробовал решить в лоб, Size*4, ругается на превышение длины строки.
Глянул исходник IBX под лазарус, там тоже самое. Глянул дельфийский IBX, там еще проще, но суть та же.
Как решить проблему?
Есть поле DOCNUM VARCHAR(8), кодировка базы и поля, UTF8, соединение тоже UTF8. Использую FIBL + Firebird 2.5 + Lazarus 1.6 + FPC 3.0.0 + Win7
Проблема в следующем: пишу через FIBDataSet в это поле 'ПН-00001', а получаю 'ПН-000'.
С одной стороны, понятно, что Length('ПН-000') = 8, как длина поля. Но ведь это не правильно! Попытался через FIBQuery записать, ругается на превышение длины строки.
Полез в исходники, в TFIBStringField.SetAsString, там
- Код: Выделить всё
StrLCopy(Buffer, PChar(ValueStr), Size);
Поскольку размер поля 8, то вот она и обрезка. Попробовал решить в лоб, Size*4, ругается на превышение длины строки.
Глянул исходник IBX под лазарус, там тоже самое. Глянул дельфийский IBX, там еще проще, но суть та же.
Как решить проблему?