2011-03-22 74 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

相關問題