2011-03-22 66 views
1

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

如何让DBX给我一个来自Unicode字符串列的Unicode字符串结果?

+0

不知道fb驱动程序,但是使用ib驱动程序(在fb数据库上),我可以在sql连接上使用UTF8列的参数'ServerCharSet = UTF8'。对于连接,有可能使用unicode或ansi工作,我的意思是我无法使用混合列表工作。不知道它是否仍然如此。 – 2011-03-22 23:58:19

+0

顺便说一句,如果你设计的数据库不适用于UNICODE_FSS。 google上的第一个“UNICODE_FSS”命中是[this](http://www.destructor.de/firebird/charsets.htm)。 – 2011-03-23 00:02:06

+0

@sertac:很好。我以编程方式生成创建脚本,所以我可以很容易地修复它。仍然没有解决TWideStringField问题,虽然... – 2011-03-23 00:07:22

回答

10

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

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

Char set at connection level

设置此,将导致此:

TWideStringField

我现在收集这些图片来自而几个月前教学德尔福我创建了一个示例项目。如果这是您的情况,您必须在创建任何持久字段之前设置此属性。

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

+0

谢谢。这工作! – 2011-03-23 00:23:05

+0

很高兴帮助,@梅森 – jachguate 2011-03-23 02:17:33

相关问题