Firebird数据库不能识别Unicode字符

问题描述:

当试图查询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的俄语和英语版本

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

+0

谢谢Makowski!我现在完全使用Flamerobin。它适用于西里尔字母。我检查了有问题的列字符集,并将其设置为NONE。我也连接到数据库与NONE字符集,所以这不是问题。 –

+0

Makowski,如果你知道如何与FireRobin/Firebird合作,你还可以看看另一个quesiton吗? FireRobin很棒,但我仍然无法用西里尔文字母创建视图:http://*.com/questions/21797816/firebird-create-a-view-with-cyrillic-letters-in-where-clause –

这里的问题是您没有使用参数化查询。在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文档的链接。 –