2014-02-14 21 views
0

當試圖查詢Firebird表時,我真的需要別人幫助解決編碼問題。Firebird數據庫不能識別Unicode字符

我連接到使用火鳥藝術大師一個Firebird數據庫: Connection string

的問題是,每當我包括SQL查詢火鳥西裏爾字母不能正確地「理解」他們。

例如,考慮查詢的一些西裏爾字母:

SELECT * FROM ROYALTY 
WHERE ROYALTY.PRIM = 'Кириллица' 

即使是包含「Кириллица」在PRIM列值的行它不返回任何值。

然而,僅僅使用拉丁字母的時候一切正常:

SELECT * FROM ROYALTY 
WHERE ROYALTY.PRIM = 'Latin letters' 

可有人建議做什麼,好嗎?

以下是截圖我的觀點明確:

Error

enter image description here

我試圖連接到數據庫具有以下字符集,沒有陽性結果:

  • NONE
  • ISO8859_5
  • DOS866
  • CYRL
  • WIN1251
  • UNICODE_FSS

附加信息:

  • 火鳥版本:2.5.2
  • 火鳥大師版本7.7.0.1(英)
  • 我已經嘗試了Windows的俄語和英語版本

回答

3

檢查您用於此列的字符集,並確保將其用作連接字符集,即系統的字符集。 嘗試使用Flamerobin或DatabaseWorbench,或者可能是Firebird Maestro可以幫助您,它顯然與您正在使用的工具有關。火鳥本身沒有問題使用西裏爾字母 而對於數據庫中的字符集選擇UTF8。

+0

謝謝Makowski!我現在完全使用Flamerobin。它適用於西裏爾字母。我檢查了有問題的列字符集,並將其設置爲NONE。我也連接到數據庫與NONE字符集,所以這不是問題。 –

+0

Makowski,如果你知道如何與FireRobin/Firebird合作,你還可以看看另一個quesiton嗎? FireRobin很棒,但我仍然無法用西里爾文字母創建視圖:http://stackoverflow.com/questions/21797816/firebird-create-a-view-with-cyrillic-letters-in-where-clause –

1

這裏的問題是您沒有使用參數化查詢。在IBExpert中,您可以輸入「:name」分號和參數名稱,並在下面的窗口中進行提示。 IBExpert Parameter Test

在Java/C#.Net中使用API​​創建帶參數的查詢。現在你正在做的是在SQL字符串中提供非ANSI字符,這並不能保存你的預期。

我看到您正在使用Firebird Maestro,我不確定該產品使用什麼參數,但值得在它們的文檔中查看它是什麼。 http://www.sqlmaestro.com/products/firebird/maestro/help/10_04_00_query_parameters/實際上它看起來與參數的冒號和名稱是相同的格式。

+0

謝謝,洛佩茲。這部分回答了我的問題,但並未解決問題。如果我有一個複雜的查詢,我需要通過參數形式手動輸入幾個查詢?這對我來說很難。有沒有比這更好的?另外,我試圖用參數創建一個視圖,但是Firebird會拋出一個錯誤:「SQL Error:無效請求BLR在offset @ 1未定義的消息號。錯誤代碼:-104。無效令牌」 –

+0

Hi Zerg。對,那是正確的。 Firebird的SQL定義只接受ANSI字符。如果您需要存儲非ANSI字符,則需要通過參數提供它。我能夠通過SQL提供UTF8字符的距離最近的是通過十六進制文字。請參閱:http://www.firebirdsql.org/refdocs/langrefupd25-hexbinstrings.html例如,使用以下查詢輸出「たまご」。從rdb $ database選擇CAST(CAST(_utf8 x'E3819FE381BEE38194'作爲VARCHAR(100))作爲blob)我添加了一個指向Maestro文檔的鏈接。 –