在FireRobin中,我正在尝试创建一个包含西里尔字母的视图:
CREATE VIEW "CyrillicView" (PRIM)
AS
SELECT
PRIM
FROM ROYALTY
WHERE
(ROYALTY.PRIM = 'Кириллица');
不幸的是,它会导致错误:
消息:isc_dsql_execute2失败
SQL消息:-607未为系统表定义此操作。
引擎代码:335544351引擎消息:元数据不成功 更新STORE RDB $ RELATIONS失败格式错误的字符串
当我用拉丁语替换西里尔字母时,一切正常。 另外,我注意到当我从上面的代码中只运行SELECT语句时 - 即使用西里尔字母也可以正常工作。
我尝试使用UTF-8字符集连接到FireBird,甚至成功创建了一个带有西里尔字母的视图。但它没用,因为当我连接“NONE”charset(右边的)时,视图根本不会返回任何行。我已经检查了视图创建代码,它看起来像这样:
CREATE VIEW CYR (PRIM)
AS
SELECT
PRIM
FROM ROYALTY
WHERE
(ROYALTY.PRIM = 'Кириллица')
使用FireRobin连接NONE charset(右侧):
使用FIreRibon连接UTF-8字符集(错误的字符集)时: - 可以使用西里尔字母创建视图(实际上不返回任何值) - 具有NONE字符集的所有列在结果中都不包含值
也许有人可以建议我能在这做什么?我可以在where子句中以某种方式指定不使用我的编码吗?也许,在Firebird中有一个特殊的符号,就像我在SQL Server中可以放置Uncode字符串之类的那样:
CREATE VIEW CYR (PRIM)
AS
SELECT
PRIM
FROM ROYALTY
WHERE
(ROYALTY.PRIM = N'Кириллица')
其他信息:
答案 0 :(得分:2)
问题源于您使用NONE作为数据库默认,列和连接字符集。它本质上意味着'没有字符集,使用任何发送的字节'。对于基本的ASCII设置,这通常可以正常工作。对于其他角色,它可能会导致各种奇怪的问题。
对于您的视图定义,您可以通过将列显式地转换为带有西里尔字符的字符集(win1251),并使用字面集的字符集导入器来使其工作:
Cast(theColumn as varchar(100) character set win1251) = _win1251 '<cyrillic chars>'
最好是为数据库默认,列和连接使用显式字符集。使用显式字符集,如果可能,firebird将在字符集之间进行转换。