为什么我的查询返回错误的字符串类型?

Mas*_*ler 1 delphi firebird dbexpress delphi-2010

根据Firebird官方文档,包含Unicode字符串(SQL Server称为NVARCHAR)的列应声明为VARCHAR(x) CHARACTER SET UNICODE_FSS.所以我这样做了,但是当我用DBExpress查询表时,我得到的结果是一个TStringField,它只是AnsiString,而不是我期待的TWideStringField.

如何让DBX从Unicode字符串列中获取Unicode字符串结果?

jac*_*ate 10

使用Firebird,您唯一的选择是将整个数据库连接设置为Unicode字符集,例如utf8.

这样,所有VarChar列都将生成TWideStringField类型的字段.尽管在创建列时声明了特定的char集,但字段将始终为TWideStringFields.

字符集在连接级别设置

设置此项将导致:

TWideStringField

我现在从几个月前教授Delphi时创建的示例项目中收集这些图像.如果是这种情况,您必须在创建任何持久字段之前设置此属性.

看起来驱动程序不支持UNICODE_FSS字符集,因为我的第一个操作是创建一个新项目,设置属性然后创建一些字段.恕我直言,最好将整个数据库声明为utf8或create database语句中驱动程序支持的其他字符集,然后匹配Delphi中的数据库字符集以避免字符串转换.