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

使用非Unicode数据库的JDBC,如何指定不支持字符的处理?,jdbc,unicode,Jdbc,Unicode,我有一个使用Unicode的Java应用程序和一个数据库(Oracle、MSSQL、DB2、MySQL),该数据库位于8位非Unicode代码页中(例如IBM1411)。将数据库迁移到Unicode不是一个选项 当应用程序传递无法在数据库编码中编码的unicode字符时,有没有办法指定JDBC驱动程序的行为(replace/error/warn)?对于编码的主题没有什么可说的,所以这取决于实现来处理 由于Java本身在内部使用UTF-16,每个值得一试的JDBC驱动程序都会自动在数据库编码和UT

我有一个使用Unicode的Java应用程序和一个数据库(Oracle、MSSQL、DB2、MySQL),该数据库位于8位非Unicode代码页中(例如IBM1411)。将数据库迁移到Unicode不是一个选项

当应用程序传递无法在数据库编码中编码的unicode字符时,有没有办法指定JDBC驱动程序的行为(replace/error/warn)?

对于编码的主题没有什么可说的,所以这取决于实现来处理

由于Java本身在内部使用UTF-16,每个值得一试的JDBC驱动程序都会自动在数据库编码和UTF-16之间转换

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

我知道的两个JDBC驱动程序的行为完全不同:

  • OracleJDBC将以静默方式替换无法转换为的字符。无法让Oracle JDBC驱动程序或Oracle数据库抛出错误

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

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

对于编码主题没有什么可说的,因此由实现来处理这一问题

由于Java本身在内部使用UTF-16,每个值得一试的JDBC驱动程序都会自动在数据库编码和UTF-16之间转换

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

我知道的两个JDBC驱动程序的行为完全不同:

  • OracleJDBC将以静默方式替换无法转换为的字符。无法让Oracle JDBC驱动程序或Oracle数据库抛出错误

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


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

我认为驱动程序会使用数据库的字符集编码自动转换字符。如果某些字符映射不正确,则它们最终会损坏。允许应用程序将数据存储在DB不支持的字符集中,从长远来看,这听起来像是自找麻烦。我认为驱动程序使用DB的字符集编码自动转换字符。如果某些字符映射不正确,则它们最终会损坏。允许应用程序将数据存储在DB不支持的字符集中,从长远来看,这听起来像是自找麻烦。