Firebird数据库不能识别Unicode字符
当试图查询Firebird表时,我真的需要别人帮助解决编码问题。Firebird数据库不能识别Unicode字符
我连接到使用火鸟艺术大师一个Firebird数据库:
的问题是,每当我包括SQL查询火鸟西里尔字母不能正确地“理解”他们。
例如,考虑查询的一些西里尔字母:
SELECT * FROM ROYALTY
WHERE ROYALTY.PRIM = 'Кириллица'
即使是包含“Кириллица”在PRIM列值的行它不返回任何值。
然而,仅仅使用拉丁字母的时候一切正常:
SELECT * FROM ROYALTY
WHERE ROYALTY.PRIM = 'Latin letters'
可有人建议做什么,好吗?
以下是截图我的观点明确:
我试图连接到数据库具有以下字符集,没有阳性结果:
- NONE
- ISO8859_5
- DOS866
- CYRL
- WIN1251
- UNICODE_FSS
附加信息:
- 火鸟版本:2.5.2
- 火鸟大师版本7.7.0.1(英)
- 我已经尝试了Windows的俄语和英语版本
检查您用于此列的字符集,并确保将其用作连接字符集,即系统的字符集。 尝试使用Flamerobin或DatabaseWorbench,或者可能是Firebird Maestro可以帮助您,它显然与您正在使用的工具有关。火鸟本身没有问题使用西里尔字母 而对于数据库中的字符集选择UTF8。
这里的问题是您没有使用参数化查询。在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 Error:无效请求BLR在offset @ 1未定义的消息号。错误代码:-104。无效令牌” –
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文档的链接。 –
谢谢Makowski!我现在完全使用Flamerobin。它适用于西里尔字母。我检查了有问题的列字符集,并将其设置为NONE。我也连接到数据库与NONE字符集,所以这不是问题。 –
Makowski,如果你知道如何与FireRobin/Firebird合作,你还可以看看另一个quesiton吗? FireRobin很棒,但我仍然无法用西里尔文字母创建视图:http://stackoverflow.com/questions/21797816/firebird-create-a-view-with-cyrillic-letters-in-where-clause –