从 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 开发人员之一