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 文件中的“Š”和其他字符?如何解决?