2014-02-15 42 views
2

在FireRobin,我試圖創建一個包含西裏爾字母中有一個視圖用西裏爾字母一個觀點:火鳥創建WHERE子句中

CREATE VIEW "CyrillicView" (PRIM) 
AS 
SELECT 
    PRIM 
FROM ROYALTY 
WHERE 
    (ROYALTY.PRIM = 'Кириллица'); 

不幸的是,它導致錯誤:

Message: isc_dsql_execute2 failed

SQL Message : -607 This operation is not defined for system tables.

Engine Code : 335544351 Engine Message : unsuccessful metadata update STORE RDB$RELATIONS failed Malformed string

當我用拉丁字母替換西裏爾字母時,一切正常。 此外,我注意到,當我從上面的代碼只運行SELECT語句 - 即使西里爾文字母在它工作正常。

我試着用UTF-8字符集連接到FireBird,甚至用西裏爾字母成功創建了一個視圖。但它沒用,因爲當我連接「無」字符集(正確的)時,視圖根本不返回任何行。我檢查了視圖創建代碼,它看起來像這樣:

CREATE VIEW CYR (PRIM) 
AS 
SELECT 
    PRIM 
FROM ROYALTY 
WHERE 
    (ROYALTY.PRIM = 'Кириллица') 

雖然與NONE字符集(正確的)與FireRobin連接:

  • 可以寫工作SELECT查詢用西裏爾字母
  • 使用西裏爾字母
  • 可以不西裏爾字母創建視圖時創建,同時用UTF-8連接
  • 視圖和包含西裏爾字母r
  • 無法創建視圖E打開什麼

雖然用UTF-8字符集(錯誤的)與FIreRibon連接: - 可以創建與西裏爾字母視圖(實際上不返回任何值) - 用無所有列字符集不包含結果中的值

也許有人可以建議我可以在這裏做什麼?我可以以某種方式在where子句中指定不要ruion我的編碼?也許,在火鳥有一個特殊的符號,就像在SQL Server中,我可以UNCODE字符串前放像這樣:

CREATE VIEW CYR (PRIM) 
AS 
SELECT 
    PRIM 
FROM ROYALTY 
WHERE 
    (ROYALTY.PRIM = N'Кириллица') 

附加信息:

  • 火鳥2.5.2
  • 數據庫字符集爲NONE
  • 所有的數據庫中的列沙雷是NONE

回答

2

問題是由使用NONE作爲數據庫莖DEF ault,列和連接字符集。它基本上意味着'沒有字符集,使用任何發送的字節'。對於基本的ASCII設置,這通常工作正常。對於其他角色可能會導致各種奇怪的問題。

爲了您的視圖定義你也許可以得到它通過明確鑄造柱用西裏爾字母(win1251)設置一個字符工作,並通過使用的字符集引入了文字:

Cast(theColumn as varchar(100) character set win1251) = _win1251 '<cyrillic chars>' 

更好但是會爲數據庫默認值,列和連接使用明確的字符集。如果可能,使用明確的字符集,firebird將在字符集之間轉換爲你。

+0

馬克,非常感謝你!它實際上有幫助!在我的情況下得到的查詢如下所示:Cast(ROYALTY.PRIM as varchar(100)character set win1251)= _win1251'Кириллица' –