Firebird 数据库无法识别 unicode/西里尔字母

Posted

技术标签:

【中文标题】Firebird 数据库无法识别 unicode/西里尔字母【英文标题】:Firebird Database does not recognize unicode/cyrillic letters 【发布时间】:2014-03-14 04:34:21 【问题描述】:

在尝试查询 Firebird 表时,我真的需要有人帮助解决编码问题。

我正在使用 Firebird Maestro 连接到一个 firebird 数据库:

问题是每当我在 SQL 查询中包含西里尔字母时,Firebird 都不能正确“理解”它们。

例如,考虑一个带有一些西里尔字母的查询:

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

即使在 PRIM 行中有一行包含“Кириллица”值,它也不返回任何值。

但是,仅使用拉丁字母时一切正常:

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

有人可以建议怎么做吗?

这里有一些截图来说明我的观点:

我尝试使用以下字符集连接到数据库,但没有得到肯定的结果:

无 ISO8859_5 DOS866 CYRL WIN1251 UNICODE_FSS

其他信息:

火鸟版本:2.5.2 Firebird Maestro 版本 7.7.0.1(英文) 我尝试过俄语和英语版本的 Windows

【问题讨论】:

【参考方案1】:

检查您在此列中使用的字符集,并确保将其用作连接字符集,即系统的字符集。 也可以尝试使用 Flamerobin 或 DatabaseWorbench,或者可能是 Firebird Maestro 可以帮助您,这显然与您使用的工具有关。 Firebird 本身使用西里尔字母没有问题 对于数据库中的字符集,请选择 UTF8。

【讨论】:

谢谢你,马科夫斯基!我现在完全在使用 Flamerobin。它与西里尔字母完美搭配。我检查了有问题的列字符集,并设置为 NONE。我还使用 NONE 字符集连接到数据库,所以这不是问题。 Makowski,如果您知道如何使用 FireRobin/Firebird,您能否再看看另一个问题,好吗? FireRobin 很棒,但我仍然无法使用西里尔字母创建视图:***.com/questions/21797816/…【参考方案2】:

这里的问题是您没有使用参数化查询。在 IBExpert 中,您可以输入一个“:name”分号和您的参数名称,它会在下面的窗口中进行提示。

在 Java/C# .Net 中,使用 API 创建带参数的查询。现在您正在做的是在 SQL 字符串中提供非 ANSI 字符,这并没有节省您的预期。

我看到您正在使用 Firebird Maestro,我不确定该产品使用什么参数,但值得查看他们的文档以了解它是什么。 http://www.sqlmaestro.com/products/firebird/maestro/help/10_04_00_query_parameters/ 实际上,冒号和参数名称的格式似乎相同。

【讨论】:

谢谢你,洛佩兹。这部分回答了我的问题,但没有解决问题。如果我有一个复杂的查询,我需要通过参数表单手动输入几个查询?这对我来说简直是疯了。还有什么比这更好的吗?另外,我尝试创建带参数的视图,但 Firebird 抛出错误:“SQL 错误:无效请求 BLR 在偏移量@1 未定义消息号。错误代码:-104。无效令牌” 你好虫族。对,那是正确的。 Firebird 的 SQL 定义只接受 ANSI 字符。如果需要存储非 ANSI 字符,则需要通过参数提供。我能够通过 SQL 提供 UTF8 字符的最接近的是通过十六进制文字。参见:firebirdsql.org/refdocs/langrefupd25-hexbinstrings.html 例如“たまご”使用以下查询输出。从 rdb$database 中选择 CAST(CAST(_utf8 x'E3819FE381BEE38194' as VARCHAR(100)) as blob) 我添加了指向 Maestro 文档的链接。

以上是关于Firebird 数据库无法识别 unicode/西里尔字母的主要内容,如果未能解决你的问题,请参考以下文章

错误:CSS:unicode-range:值太多或无法识别值

为啥我的支持 unicode 的软件无法识别 ANSI 文件中的“Š”和其他字符?如何解决?

Firebird:无法完成对主机的网络请求

如何为 windows 的 firebird 数据库创建多个实例(用户)?

iis6.0+php5.6无法加载firebird模块

文件名包括路径名称中的中文无法识别,