Informix Dynamic Server Version 11.70 符号商标转换为问号

Informix Dynamic Server Version 11.70 symbol trademark converted to question mark

  1. Rhel 2.6 上的 IBM Informix 动态服务器版本 11.70

  2. 一些信息

    select distinct dbs_collate 
    from sysmaster:sysdbslocale;
    
    dbs_collate
    -----------
    
    en_US.819
    
  3. 我的jdbc

    jdbc.ep.ifx.url=jdbc:informix-sqli://server:9999/testdb:informixserver=test_shm;IFX_USE_STRENC=true;
    
  4. table

    create table test
    (
    id serial,
    notes nchar(5120)
    );
    
  5. 我想达到什么目的

    • 使用基于 Web 的应用程序将文本添加到 Informix table 至 JDBC
    • 文本可以是任何内容,包括符号(例如版权、商标)
  6. 当前有效

    • 我可以在 table、
    • 中添加任何文本、符号
    • 但某些符号(例如商标)将保存为“?”。
  7. 我的问题

    • 如何使符号正确保存和显示而不是转换为“?”

有些字符在en_US.819中没有出现。您可以看到它的外观:https://en.wikipedia.org/wiki/ISO/IEC_8859-1copyrightreserved 个字符,而我看不到 trade mark.

我制作了一个简单的 Jython 程序,可以将这些字符插入到 Informix 数据库中。我的测试数据库使用波兰语编码 pl_PL.1250.

insert into test_nchar (id, notes) values (1, 'copyright: ©')
insert into test_nchar (id, notes) values (2, 'registered: ®')
insert into test_nchar (id, notes) values (3, 'trademark: ™')
Something is terrible wrong with [insert into test_nchar (id, notes) values (3, 'trademark: ™')]
Traceback (most recent call last):
  File "jdbc_ifx_encoding.py", line 20, in run_sql
    c.execute(sql)
SQLException: java.sql.SQLException: B\u0142\u0105d konwersji kod\xf3w wskutek zabronionej sekwencji lub b\u0142\u0119dnej warto\u015bci.
SELECT ...
1: [copyright: ©]
2: [registered: ®]

我尝试将错误消息从波兰语翻译成英语:Error while code conversion because of disallowed sequence or wrong value. 此消息如果 INSERT 带有商标字符。商标不适用于我使用的波兰 CP1250,也不适用于您使用的 CP819。也许您使用 ODBC 等其他技术插入了它?

您还可以看到 select 在 copyright/registered 字符之前显示奇怪的字符。

我认为唯一的解决方案是使用 UTF-8 等 Unicode 编码创建新数据库。