我配置了 Informix 数据库:
DB_LOCALE=pl_pl.CP1250
(使用 Windows CP1250 字符编码的波兰语语言环境)。
在此数据库中有一个包含 VARCHAR
列的表,其中大部分数据采用 CP1250 编码,但某些记录采用 UTF-8 编码。我怀疑它们是通过 ODBC 插入的并且错误地编码了 .csv 导入。
当我使用 ODBC 时,可以获取错误编码的数据。它看起来不太漂亮:
nazw:┼?UKASIK
但可以显示并且最终用户可以编辑此类数据。这些“奇怪”的字符是 'Ł' 字母的 UTF-8 字符。
当我使用 native JDBC 驱动程序时,我无法获取此类数据。我得到了异常,而不是 String
:
JDBC Error: -79783
IX000
Kodowanie lub zestaw kodów znaków nie są obsługiwane.
英文说明:
-79783 Encoding or code set not supported
Explanation: The encoding or code set entered in the DB_LOCALE or CLIENT_LOCALE variable is not valid.
我在 Jython 中创建了测试程序,该程序使用 native JDBC 驱动程序和 JDBC-ODBC 桥连接到数据库。我只在 native 驱动程序中遇到异常。我还尝试通过其他 JDBC getXXX() 方法获取 byte[]
或 Stream
来获取此数据,但它们也引发了异常。我使用 JDBC URL 作为:
jdbc:informix-sqli://test-informix:9088/test:informixserver=ol_testifx;DB_LOCALE=pl_PL.CP1250;CLIENT_LOCALE=pl_PL.CP1250;charSet=CP1250
服务器版本:IBM Informix Dynamic Server 版本 11.50.FC4
native 驱动程序:3.70.JC5DE;专业:3;未成年人:70
JDBC-ODBC 桥使用的 ODBC 驱动程序:2.0001 (3.70.TC5DE);专业:2;次要:1
我的问题是:
有什么方法可以获取这种错误编码的数据吗?我想看看 '?'字符而不是错误编码的字符。我不想要异常(exception),因为它们不允许最终用户查看和更正错误编码的数据。
最佳答案
我从 IBM Polska 获得了帮助,他们发现 JDBC 连接字符串
可以通过 IFX_USE_STRENC=true
扩展:http://www-01.ibm.com/support/docview.wss?uid=swg21502902
这使得 JDBC 能够获取错误编码的数据。现在我可以阅读:
nazw:Przemysław
nazw:Ĺ?UKASIK
(第二条记录的波兰语字母 Ł
编码错误)
谢谢 IBM Polska!
关于java - 通过 native JDBC Informix 驱动程序获取错误编码的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14621963/