1

我正在使用 Java 中的 Firebird 数据库。一切正常,但如果数据库文件路径包含国家字符,我连接到我的数据库时遇到问题,例如。“á”或“č”。

示例异常:

org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544344. I/O error during "CreateFile (open)" operation for file "Z:/testing/á/sample.fdb"

路径正确,数据库存在。Jaybird / JDBC 路径中的“á”字符有问题。

任何想法如何解决它或问题出在哪里?感谢所有回复。

操作系统:Windows 7 Pro 64 位
JDK:1.7.0.25
Jaybird:2.2.3

4

1 回答 1

2

从 Jaybird 3 开始,如果服务器是 Firebird 2.5 或更高版本,数据库文件名将始终以 UTF-8 格式发送。

Jaybird 2.2 及更早版本对数据库名称中的特殊字符的支持有限。您可以使用几个选项来解决此问题,但它们是否真的有效很大程度上取决于 Firebird 的版本和操作系统的默认字符集(运行 Firebird 的位置)。

选项 1:使用连接属性filename_charset=<name of charset>where<name of charset>是运行 Firebird 服务器的操作系统的默认字符集。

例如:

jdbc:firebirdsql://myserver/mydatabase?filename_charset=Cp1252

选项 2(Firebird 2.5 或更高版本,带有 Jaybird 2.2):使用JDBC-251中描述的解决方法:

使用连接 URL启动您的 Java 应用程序-Dfile.encoding=UTF8并在其中包含:utf8_filename=1

jdbc:firebirdsql://myserver/mydatabase?utf8_filename=1

使用此选项时,请确保您已使用连接属性指定连接字符集charSetlocalEncodinglocal_encoding(对于 Java 字符集名称)和/或encodinglc_ctype(对于 Firebird 字符集名称)。如果不是,您使用NONE的是使用 JVM 默认字符集的 Firebird 字符集,您需要将 JVM 设置charSet为“正常”默认编码,以防止由于file.encoding(在某些情况下- 除了指定charSet- 您可能还需要明确设置encodingNONE)。

选项 3:在 firebird 服务器中为数据库定义一个仅包含 ASCII 字符的别名,aliases.conf并使用此别名进行连接:

jdbc:firebirdsql://myserver/thealias

披露:我是 Jaybird 开发人员之一

于 2013-08-05T13:25:10.027 回答