Db2 CCSID开关是否存在任何已知问题?

Db2 CCSID开关是否存在任何已知问题?,db2,iseries-navigator,Db2,Iseries Navigator,我不熟悉db2/iSeries,但是我正在研究如何将来自多种语言的字符存储在db2表中。 将db2/iSeries表中的列从CCSID为37更改为1208是否有任何明显的问题?切换CCSID将如何影响列中已存储的数据?您将看到一些可怕的消息: CREATE TABLE QTEMP/TEST (FLD1 CHAR (10 ) CCSID 37 NOT NULL WITH DEFAULT) ALTER TABLE QTEMP/TEST ALTER COLUMN FLD1 SET DATA TYP

我不熟悉db2/iSeries,但是我正在研究如何将来自多种语言的字符存储在db2表中。
将db2/iSeries表中的列从CCSID为37更改为1208是否有任何明显的问题?切换CCSID将如何影响列中已存储的数据?

您将看到一些可怕的消息:

CREATE TABLE QTEMP/TEST (FLD1 CHAR (10 ) CCSID 37 NOT NULL WITH DEFAULT) 

ALTER TABLE QTEMP/TEST ALTER COLUMN FLD1 SET DATA TYPE CHARACTER (  
10) CCSID 1208 NOT NULL WITH DEFAULT  

CPD32CC - Change to field FLD1 may result in data loss.
--reason code 02: 02 - The new length is shorter than the current length.
CPA32B2 - Change of file TEST may cause data to be lost. (C I)
SQL0460 - Truncation of data may have occurred for ALTER TABLE of TEST in QTEMP.
但是假设数据是alpha,你不应该丢失任何东西

但是,尝试存储需要DBCS编码的10个字符的字符串将失败,因为列长度仍然只有10个字节……而在CCSID 1208中,10个字符的DBSC字符串需要22个字节。(尽管有关截断的消息不会消失,除非将长度增加到28?)

如果将类型更改为使用UTF-16(CCSID 1200)的NCHAR,系统会自动将10识别为字符长度,并分配20个字节来存储它

ALTER TABLE QTEMP/TEST ALTER COLUMN FLD1 SET DATA TYPE NCHAR(10) NOT NULL WITH DEFAULT 
也就是说,假设您的文件是现有应用程序的一部分,更改表只是问题的开始

现有的RPG程序必须重新编译,而且很可能需要修改

通过使用从Unicode转换为EBCDIC的LF(视图)层,您可以绕过该需求。这有助于处理当前数据。但这无助于处理实际需要unicode的新数据

另外,IBM iAccess for Windows中包含的旧的5250仿真器不支持unicode。您需要使用较新的Access客户端解决方案(ACS)仿真器或基于浏览器的IBM iAccess for Web