从 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
使用此选项时,请确保您已使用连接属性指定连接字符集charSet,localEncoding或local_encoding(对于 Java 字符集名称)和/或encoding或lc_ctype(对于 Firebird 字符集名称)。如果不是,您使用NONE的是使用 JVM 默认字符集的 Firebird 字符集,您需要将 JVM 设置charSet为“正常”默认编码,以防止由于file.encoding(在某些情况下- 除了指定charSet- 您可能还需要明确设置encoding为NONE)。
选项 3:在 firebird 服务器中为数据库定义一个仅包含 ASCII 字符的别名,aliases.conf并使用此别名进行连接:
jdbc:firebirdsql://myserver/thealias
披露:我是 Jaybird 开发人员之一