是的,你的确理解正确。这是VCL及其文档,它们被破坏。你的困惑确实很有道理!
在Delphi 2009+执行,你必须使用AsString
财产为AnsiString
和AsWideString
为string=UnicodeString
。
事实上,As*String
性质被定义为这样的:
property AsString: string read GetAsString write SetAsString;
property AsWideString: UnicodeString read GetAsWideString write SetAsWideString;
property AsAnsiString: AnsiString read GetAsAnsiString write SetAsAnsiString;
如何在地球上,我们也许能够找出AsString
返回AnsiString
?与其他VCL/RTL相比,它根本没有意义。
该实施方案使用TStringField
类别AnsiString
和TWideStringField
对于string=UnicodeString
已被破坏。
此外,documentation is also broken:
Data.DB.TField.AsString
表示为一个字符串(DELPHI)或AnsiString类型(C++)字段的值。
这不代表在Delphi中的string
,而是AnsiString
!该物业使用普通string=UnicodeString
类型的事实完全是令人迷惑的。
从数据库的角度来看,数据库驱动程序需要处理Unicode或使用特定的字符集。但从VCL的角度来看,在Delphi 2009+中,你应该只知道string
类型,并且确信使用AsString: String
将会是Unicode准备好的。
+1由于此行为是恕我直言的VCL错误的实施。这是恕我直言,一个错误的命名,*不符合其余的VCL/RTL *和一个混乱/误解很多的来源。你的问题确实很有意义。 – 2013-04-22 05:21:25