我在使用 FireDAC 和中文字符串时遇到了一个奇怪的行为(猜想这也发生在任何其他 unicode 字符串中)。
我有一个这样的查询:
Q.SQL.Add('select count(*) as CNT from TABLE where F = :P');
在表中,字段 F 是一个 varchar(255)。
V: Variant;
V := '你好'; // the string means 'Hello'
Q.ParamByName('P').Value := V; // Value is a Variant property
最初我虽然问题是 varchar 与 nvarchar,但问题发生在内部 FireDac 参数分配之前,比针对 RDBMS 的操作要早得多。
奇怪的是,一旦分配了 FireDac 参数,它就会变成 '??',并转换为 varString。
相反,如果我写:
Q.ParamByName('P').AsWideString := V; // AsWideString is a UnicodeString property
它工作正常。
对我来说,这似乎是一种不自然的行为,因为变体变量 V 知道内容是 varUString,所以在分配给 FDParam 期间字符串被转换(错误)为 varString 是非常出乎意料的。
以前有人注意到这种行为吗?
谢谢