java - Jaybird/JDBC + 路径中的国家字符

标签 java utf-8 localization firebird jaybird

我正在使用 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
杰鸟:2.2.3

最佳答案

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

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

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

例如:

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

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

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

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

使用此选项时,请确保您已使用连接属性 charSet 指定连接字符集, localEncodinglocal_encoding (对于 Java 字符集名称),和/或 encodinglc_ctype (对于 Firebird 字符集名称)。如果没有,您正在使用 Firebird 字符集 NONE它使用 JVM 默认字符集,您需要设置 charSet更改为 JVM 的“正常”默认编码,以防止由于 file.encoding 的值发生更改而出现字符集转换问题。 (在某些情况下 - 除了指定 charSet - 您可能还需要明确将 encoding 设置为 NONE )。

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

jdbc:firebirdsql://myserver/thealias

披露:我是 Jaybird 开发者之一

关于java - Jaybird/JDBC + 路径中的国家字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18059030/

相关文章:

Java 类通常自行编译,但通过 JSP 运行时会抛出 NoClassFoundException 或 NoClassDefFoundError

java - 转到-我如何做类似Python或Java的线程?

hadoop - Ambari Hive UTF-8 问题

javascript - 根据 ui 文化更改 CSS 中使用的图像。网站

java - 如何生成 "random"个点,它们之间的距离最小

java - 无法在不同方法中定义的内部类中引用非最终变量

mysql - 如何在 MySql 中进行口音敏感搜索

unicode - SMTP 和 Unicode/UTF-8 字符...?我如何发送它们? Base64 一切?

javascript - Angular JS : Translating static html pages with a lot of text

datetime - Sys.setlocale : request to set locale . ..无法兑现