SQLite FireDAC尾部空间

SQLite FireDAC尾部空间,sqlite,delphi,firedac,Sqlite,Delphi,Firedac,我正在使用DelphiXe7和FireDAC来访问SQLite 当我将数据放入文本字段时,任何尾随空格或#0字符都会被截断 我是否可以在SQLite或FireDAC中更改某些内容,使其保留尾部空白 // The trailing spaces after Command don't come back from SQLite. fFireDACQuery.ParamByName(kSQLFieldScriptCommands).AsString := 'Command ';

我正在使用DelphiXe7和FireDAC来访问SQLite

当我将数据放入文本字段时,任何尾随空格或#0字符都会被截断

我是否可以在SQLite或FireDAC中更改某些内容,使其保留尾部空白

// The trailing spaces after Command don't come back from SQLite.
fFireDACQuery.ParamByName(kSQLFieldScriptCommands).AsString := 'Command          ';  
禁用该属性。该属性描述为:

tfdformations.strsttrim

控制从字符串值和零中删除尾随空格 二进制值的字节数

而且似乎您希望存储二进制数据而不是文本。如果正确,最好定义您的字段数据类型,例如,对于255字节的固定长度二进制字符串(255是您使用的最大长度)

然后通过以下方式访问该字段的参数值:

var
  Data: RawByteString;
begin
  ReadByteDataSomehow(Data);

  FDQuery.FormatOptions.StrsTrim := False;
  FDQuery.SQL.Text := 'INSERT INTO MyTable (MyBinaryField) VALUES (:MyBinaryData)';
  FDQuery.ParamByName('MyBinaryData').AsByteStr := Data;
  FDQuery.ExecSQL;
end;

将属性设置为False.P.S。不要与
strsttrim
属性的初始描述混淆。有一条注释说“对于SQLite,此属性应用于所有字符串列,包括ftMemo、ftWideMemo、ftString、ftWideString、ftFixedChar和ftfixedcwidechar。”这就是您的情况。听起来是个不错的答案,那么为什么要将其作为注释发布,而不是在“您的答案”下呢下面?我已经将FormatOptions.strsttrim设置为False,它修复了一些情况,但不是所有情况。遗漏的是字符串末尾带有#0(作为字符)的字符。我之所以使用短字符串,是因为C风格的字符串在字符串中实际的#0有自己的问题。