JDBC与非Unicode数据库,如何指定不支持的字符的处理?

时间:2017-02-06 17:51:51

标签: jdbc unicode

我有一个适用于Unicode的Java应用程序和一个8位非Unicode代码页中的数据库(Oracle,MSSQL,DB2,MySQL)(例如IBM1141)。无法将数据库迁移到Unicode。

当应用程序传递unicode字符时,是否有任何方法可以指定JDBC驱动程序的行为(替换/ error / warn),而unicode字符无法以数据库编码进行编码?

1 个答案:

答案 0 :(得分:3)

JDBC specification对编码主题没什么好说的,所以由实现来处理这个问题。

由于Java本身在内部使用UTF-16,因此每个值得使用它的JDBC驱动程序将自动在数据库编码和UTF-16之间进行转换。

JDBC驱动程序在遇到无法转换的字符时的行为是特定于实现的,并且取决于数据库系统的“原理”。

我所知道的两个JDBC驱动程序表现不同:

  • Oracle JDBC将以静默方式替换无法使用replacement character转换的字符。没有办法让Oracle JDBC驱动程序或Oracle数据库抛出错误。

  • 如果无法转换字符,PostgreSQL JDBC将始终报告错误。没有办法让PostgreSQL静默修改字符或存储无效字符。

当您从数据库中读取数据时,这通常不是问题,因为所有内容都可以转换为UTF-16,但在写入数据库时​​会出现问题。在将数据写入数据库之前,您必须自己清理数据。

相关问题