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

时间:2011-03-22 23:39:46

标签: delphi delphi-2010 firebird dbexpress

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

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

1 个答案:

答案 0 :(得分:10)

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

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

Char set at connection level

设置此项将导致:

TWideStringField

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

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

相关问题