我正在使用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
答案 0 :(得分:2)
当前版本的Jaybird对databasename中的特殊字符的支持有限。您可以使用几个选项来解决此问题,但如果它们实际工作在很大程度上取决于Firebird的版本和操作系统的默认字符集(Firebird运行的位置)。
选项1:使用连接属性filename_charset=<name of charset>
,其中<name of charset>
是运行Firebird服务器的操作系统的默认字符集。
例如:
jdbc:firebirdsql://myserver/mydatabase?filename_charset=Cp1252
选项2(Firebird 2.5或更高版本):使用JDBC-251中描述的解决方法:
使用-Dfile.encoding=UTF8
启动Java应用程序,并在连接URL中包含utf8_filename=1
:
jdbc:firebirdsql://myserver/mydatabase?utf8_filename=1
使用此选项时,请确保已使用连接属性charSet
,localEncoding
或local_encoding
(对于Java字符集名称)和/或{{指定连接字符集1}}或encoding
(对于Firebird字符集名称)。如果没有,您使用的是使用JVM默认字符集的Firebird字符集lc_ctype
,您需要将NONE
设置为JVM的“正常”默认编码,以防止字符集转换问题由于charSet
的值已更改(在某些情况下 - 除了指定file.encoding
- 您还可能明确需要将charSet
设置为encoding
)。
选项3:在firebird服务器的NONE
中为数据库定义仅包含ASCII字符的别名,并使用此别名进行连接:
aliases.conf
披露:我是Jaybird开发者之一