CCSID交换机会出现任何已知问题吗?

时间:2017-04-25 16:19:58

标签: db2 iseries-navigator

我不熟悉db2 / iSeries,但是我正在努力允许将多种语言的字符存储在db2表中。 将CCSID为37到1208的db2 / iSeries表中的列更改是否存在明显问题?如何切换CCSID会影响已存储在列中的数据?

1 个答案:

答案 0 :(得分:0)

你会看到一些可怕的消息:

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个字节...并且您需要22个字节用于CCSID 1208中的10个字符的DBSC字符串。除非你将长度增加到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 Client Solution(ACS)模拟器或基于浏览器的IBM iAccess for Web。