2014-02-15 40 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'Кириллица' –