【问题标题】:Why is my query returning the wrong string type?为什么我的查询返回错误的字符串类型?
【发布时间】:2011-03-22 23:39:46
【问题描述】:

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

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

【问题讨论】:

  • 不知道 fb 驱动程序,但使用 ib 驱动程序(在 fb 数据库上)我能够在 sql 连接上使用参数为 'ServerCharSet = UTF8' 的 UTF8 列。对于连接,可以使用 unicode 或 ansi,我的意思是我无法使用具有混合列的表。不知道是不是还是这样。。
  • 顺便说一句,如果您正在设计数据库,请不要使用 UNICODE_FSS。 “UNICODE_FSS”在谷歌上的第一次点击是this
  • @sertac:很好。我正在以编程方式生成创建脚本,所以我可以很容易地修复它。不过,仍然没有解决 TWideStringField 问题...

标签: delphi delphi-2010 firebird dbexpress


【解决方案1】:

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

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

设置此,将导致:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-15
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    相关资源
    最近更新 更多